One-Dimensional Climate Models: Brown Dwarfs w/ Disequilibrium Chemistry with Self-Consistent Kzz

In this tutorial you will learn how to run 1d climate models with the effects of disequilibrium chemistry as was done for the Elf-OWL Grid Mukherjee et al. 2024 (note this should also be cited along with Mang et al. 2026 if using this code/tutorial).

What you should already be familiar with:

What you should have downloaded:

  1. Download New 1460, 661 wno Correlated-k Tables to be used by the climate code for opacity by individual molecule

You can easily do this with the get_data function:

Use the data.get_data helper function to get resortrebin files and add them to the default picaso location: reference/opaities/resortrebin >> import picaso.data as d

d.get_data(category_download=’ck_tables’,target_download=’by-molecule’)

First, check that you have downloaded and placed the correlated-k files in the correct folder

[1]:
from picaso import justplotit as jpi
from picaso import justdoit as jdi
import os
os.listdir(os.path.join(os.getenv('picaso_refdata'),'opacities','resortrebin')) #should show you a list of files
WARNING: Failed to load Vega spectrum from /data/reference_data/picaso/ref4/stellar_grids/calspec/alpha_lyr_stis_011.fits; Functionality involving Vega will be severely limited: FileNotFoundError(2, 'No such file or directory') [stsynphot.spectrum]
[1]:
['readme',
 'O2_1460.hdf5',
 'PH3_1460.hdf5',
 'Rb_1460.hdf5',
 'TiH_1460.hdf5',
 'TiO_1460.hdf5',
 'npy',
 'AlH_1460.hdf5',
 'C2H2_1460.hdf5',
 'C2H4_1460.hdf5',
 'C2H6_1460.hdf5',
 'CaH_1460.hdf5',
 'CH4_1460.hdf5',
 'CO_1460.hdf5',
 'CO2_1460.hdf5',
 'CrH_1460.hdf5',
 'Cs_1460.hdf5',
 'Fe_1460.hdf5',
 'FeH_1460.hdf5',
 'H2_1460.hdf5',
 'H2O_1460.hdf5',
 'H2S_1460.hdf5',
 'H3+_1460.hdf5',
 'HCN_1460.hdf5',
 'K_1460.hdf5',
 'Li_1460.hdf5',
 'LiCl_1460.hdf5',
 'LiF_1460.hdf5',
 'LiH_1460.hdf5',
 'MgH_1460.hdf5',
 'N2_1460.hdf5',
 'Na_1460.hdf5',
 'NH3_1460.hdf5',
 'O3_1460.hdf5',
 'OCS_1460.hdf5',
 'SiO_1460.hdf5',
 'SO2_1460.hdf5',
 'VO_1460.hdf5',
 '196']
[2]:
import warnings
warnings.filterwarnings('ignore')
import astropy.units as u
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
from astropy import constants as const
from astropy import units as u
import sys
import pandas as pd

Setting up Initial Run (highlighting main differences for disequilibrium)

[3]:
# sonora_profile_db = '/Users/nbatalh1/Documents/data/sonora_bobcat/structures_m+0.0' #recommended download #2 above
sonora_profile_db = os.path.join(os.getenv('picaso_refdata'),'sonora_grids','bobcat')

gases_fly = ['CO','CH4','H2O','NH3','CO2','N2','HCN','H2','He','PH3','C2H2','Na','K','TiO','VO','FeH']

opacity_ck = jdi.opannection(method='resortrebin',preload_gases=gases_fly) # grab your opacities
[4]:
cl_run = jdi.inputs(calculation="browndwarf", climate = True) # start a calculation


tint= 700
grav = 316 # Gravity of your Planet in m/s/s

cl_run.gravity(gravity=grav, gravity_unit=u.Unit('m/(s**2)')) # input gravity
cl_run.effective_temp(tint) # input effective temperature

nlevel = 91

We recommend starting with Sonora-Bobcat models as an initial guess.

[5]:
pressure,temp_guess = np.loadtxt(jdi.os.path.join(
                            sonora_profile_db,f"t{tint}g{grav}nc_m0.0.cmp.gz"),
                            usecols=[1,2],unpack=True, skiprows = 1)

rcb_guess = 79 # top most level of guessed convective zone

# Here are some other parameters needed for the code.
rfacv = 0.0 #we are focused on a brown dwarf so let's keep this as is

Setting K\(_{zz}\)

We will add one more concept which is the addition of K\(_{zz}\) [cm\(^2\)/s]. K\(_{zz}\) is the eddy diffusion constant, which sets the strength of vertical mixing. In PICASO we have two options for K\(_{zz}\):

  1. Constant value: sets a constant at every atmospheric layer

  2. Self consistent (see Eqn. 27 and 28 in Mukherjee et al 2023)

New code parameters:

  1. diseq_chem=True : Turns on disequilibrium chemistry

  2. self_consistent_kzz : (True/False) This solves self consistently for

  3. save_all_kzz : (True/False) Similar to save_all_profiles this saves your intermediate k_zz values if you are trying to solve for a self_consistent_kzz=True.

  4. kz : constant value if self_consistent_kzz=False

Which of those 6 do I need change change

Likely you will only be changing kz and/or, for example, playing around with a self_consistent_kzz vs a constant profile. Unless you are certain, we recommend the following set of gases_fly to remain unchanged.

In this case, we are going to use a self-consistent kzz. Because of this we don’t need to define kz, we just need to make sure that self_consistent_kzz = True.

[6]:
cl_run.inputs_climate(temp_guess= temp_guess, pressure= pressure,
                        rcb_guess=rcb_guess, rfacv = rfacv)
mh=1#NOT LOG
cto_relative = 1 #relative to solar

#now that we are not using preweighted ck tables we need to tell picaso how to compute chemistry on the fly
cl_run.atmosphere(mh=mh, cto_relative=cto_relative, chem_method='visscher', quench=True)

out = cl_run.climate(opacity_ck, save_all_profiles = True, with_spec=True,
        save_all_kzz = False, self_consistent_kzz=True,diseq_chem = True)
SUMMARY
-------
Clouds: False
quench True
cold_trap False
vol_rainout False
no_ph3 False
Moist Adiabat: False
Kzz for chem: Self Consistent Treatment
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(77), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(78), 'PH3': np.int64(75)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  235.64466644735649 2707.9291287071073 , flux balance  0.12227283166156303
Iteration number  1 , min , max temp  239.68421235650072 2710.8843960336876 , flux balance  0.09058816231369736
Iteration number  2 , min , max temp  243.3052239436151 2713.703039135567 , flux balance  0.05995520380199323
Iteration number  3 , min , max temp  246.56706016121936 2716.374603016509 , flux balance  0.030404100425359938
Iteration number  4 , min , max temp  249.49804205682187 2718.87686933563 , flux balance  0.0019842258376915525
Iteration number  5 , min , max temp  249.64398921491212 2718.9931193796588 , flux balance  1.7600739896628484e-05
In t_start: Converged Solution in iterations  5
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  249.64398921491212 0
Iteration number  0 , min , max temp  248.96937104904438 2722.615636164977 , flux balance  0.00041824068535500247
Iteration number  1 , min , max temp  248.969402725668 2722.616718793263 , flux balance  3.1489649421502983e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
 convection zone status
0 79 89 0 0 0
1
[0, 64, 64, 64, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  248.3777166878026 2725.9686060505023 , flux balance  4.4208655123865917e-05
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  248.3777166878026 0
Iteration number  0 , min , max temp  248.81990293857473 2721.844231453631 , flux balance  0.0006533012747070504
Iteration number  1 , min , max temp  248.82388893065865 2721.8105874259722 , flux balance  5.106271789008316e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
Grow Phase : Upper Zone
[0, 63, 64, 64, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  248.3007075925421 2725.99061516703 , flux balance  0.0001954597241472304
Iteration number  1 , min , max temp  248.28169974943725 2725.989494613352 , flux balance  1.488771072697019e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  248.28169974943725 0
Iteration number  0 , min , max temp  248.8532548493831 2721.764818014999 , flux balance  0.0006068707391129284
Iteration number  1 , min , max temp  248.85914111290344 2721.729674127943 , flux balance  4.7242145185885e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 62, 64, 64, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  248.4063406231432 2725.912544375541 , flux balance  0.00022603243952764055
Iteration number  1 , min , max temp  248.3899466536482 2725.911094310485 , flux balance  1.8025968021404994e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  248.3899466536482 0
Iteration number  0 , min , max temp  248.97850016197614 2721.691020117972 , flux balance  0.0005904402172787402
Iteration number  1 , min , max temp  248.98411968047756 2721.6561731449315 , flux balance  4.673807233044697e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 61, 64, 64, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  248.5837054285988 2725.7802075892473 , flux balance  -3.5088898352621534e-05
Iteration number  1 , min , max temp  248.5664751349512 2725.815069501177 , flux balance  -1.823110870810325e-07
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  248.5664751349512 0
Iteration number  0 , min , max temp  249.16245015646615 2721.6035779115464 , flux balance  0.000577950426644675
Iteration number  1 , min , max temp  249.16752985506818 2721.569097251191 , flux balance  4.736039862709016e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 60, 64, 64, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  248.81852637240976 2725.4939203859994 , flux balance  -0.001543511365247636
Iteration number  1 , min , max temp  248.7872693792162 2725.7169873917514 , flux balance  -1.1870028737152435e-05
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  248.7872693792162 0
Iteration number  0 , min , max temp  249.39469856676251 2721.511699626939 , flux balance  0.0005683430241744049
Iteration number  1 , min , max temp  249.39939356635014 2721.4774522543084 , flux balance  4.828796279261242e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 59, 64, 64, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  249.09160830651484 2725.2297975615243 , flux balance  -0.003035940593410077
Iteration number  1 , min , max temp  249.05009952583998 2725.625280748028 , flux balance  -2.3008240545995775e-05
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  249.05009952583998 0
Iteration number  0 , min , max temp  249.65636187305785 2721.426418233515 , flux balance  0.000563278070220533
Iteration number  1 , min , max temp  249.66049555736828 2721.3923757967477 , flux balance  5.01549196190927e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 58, 64, 64, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  249.3860227904144 2724.996381698511 , flux balance  -0.0044462539043245985
Iteration number  1 , min , max temp  249.33744670776704 2725.5453297369672 , flux balance  -3.380378119025983e-05
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  249.33744670776704 0
Iteration number  0 , min , max temp  249.93901690863638 2721.3511520339052 , flux balance  0.0005621314288731528
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 57, 64, 64, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  249.70102611330987 2724.8678410194525 , flux balance  -0.004967247912219826
Iteration number  1 , min , max temp  249.65562820018673 2725.471572021222 , flux balance  -3.918325553187402e-05
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  249.65562820018673 0
Iteration number  0 , min , max temp  250.22545888270875 2721.293364024795 , flux balance  0.0005622120381812013
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 56, 64, 64, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  249.95605502067218 2725.4389045979315 , flux balance  0.0002256724026744298
Iteration number  1 , min , max temp  249.95347147600597 2725.435730646332 , flux balance  2.2335923592265314e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  249.95347147600597 0
Iteration number  0 , min , max temp  250.50201671317245 2721.25304937623 , flux balance  0.0005754776519113361
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 56, 65, 65, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  250.38397370755953 2725.319799127631 , flux balance  8.683191268619317e-05
Iteration number  1 , min , max temp  250.38644167353465 2725.315855447758 , flux balance  2.555583692422366e-07
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  250.38644167353465 0
Iteration number  0 , min , max temp  250.8662415188588 2721.1082821933824 , flux balance  0.0006439031087809991
Iteration number  1 , min , max temp  250.86386780020246 2721.07591403355 , flux balance  7.680464440913108e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 55, 65, 65, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  250.5797452518462 2725.2598117113876 , flux balance  0.00015620307673083753
Iteration number  1 , min , max temp  250.58094885915673 2725.2545337445044 , flux balance  1.1168102231999084e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  250.58094885915673 0
Iteration number  0 , min , max temp  251.06559633636343 2721.0640256871534 , flux balance  0.0006173808936475986
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 55, 66, 66, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  250.93723724802732 2725.1419874802064 , flux balance  2.205123158137816e-05
Iteration number  1 , min , max temp  250.94400714282747 2725.135654423727 , flux balance  -1.1267542984823537e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  250.94400714282747 0
Iteration number  0 , min , max temp  251.37041550078075 2720.9300081578895 , flux balance  0.0006850673675536076
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 54, 66, 66, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  251.07417030290895 2725.1247452989082 , flux balance  3.195499959214249e-05
Iteration number  1 , min , max temp  251.07768121615905 2725.1176487073403 , flux balance  -1.3029148713126302e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  251.07768121615905 0
Iteration number  0 , min , max temp  251.4607648447167 2720.916055671242 , flux balance  0.0006972074375237345
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 54, 67, 67, 79, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  251.23356171852754 2725.0814494147335 , flux balance  -4.7166160737003496e-05
Iteration number  1 , min , max temp  251.2421519060187 2725.0717788633096 , flux balance  -3.1783924338505417e-06
In t_start: Converged Solution in iterations  1
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Big iteration is  251.2421519060187 0
Iteration number  0 , min , max temp  251.59703800819466 2720.8456342593645 , flux balance  0.0007629509543057032
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
[0, 54, 67, 67, 78, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  251.26582396605028 2727.894474077628 , flux balance  -3.498398277094843e-05
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Big iteration is  251.26582396605028 0
Iteration number  0 , min , max temp  251.6816971964791 2722.4121181072483 , flux balance  0.0007791944828965544
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
final [0, 54, 67, 67, 78, 89]
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
I dont have fluxes, let me compute them
Computed quenched levels at {'CO-CH4-H2O': np.int64(75), 'CO2': np.int64(66), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Iteration number  0 , min , max temp  251.2845375055398 2727.8974558261734 , flux balance  -3.358255040595615e-05
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(76), 'PH3': np.int64(73)}
Quench=True; Adjusting quench chemistry
Big iteration is  251.2845375055398 0
Iteration number  0 , min , max temp  251.68569419760348 2722.4117330887593 , flux balance  0.0007817562179592434
In t_start: Converged Solution in iterations  0
I am updating kzz. This could be either because clouds were requested (which always use self consistent kzz) or because self consistent kzz profiles were requested for chemistry.
Computed quenched levels at {'CO-CH4-H2O': np.int64(76), 'CO2': np.int64(67), 'NH3-N2': np.int64(80), 'HCN': np.int64(77), 'PH3': np.int64(74)}
Quench=True; Adjusting quench chemistry
Profile converged before max_outer_iterations
YAY ! ENDING WITH CONVERGENCE

Compare Diseq and Chemeq Climate Profile

For the case we chose to do a self-consistent kzz instead of a low, constant kzz. We also use the resort-rebin chemistry method compared to the pre-weighted CK tables. For more information about the difference between these, you can look at the chemistry notebook

[7]:
plt.ylim(200,1.7e-4)
plt.semilogy(out['temperature'],out['pressure'],"r", label='Resort-Rebin, Chemical Disequilibrium, Self Consistent Kzz')
plt.semilogy(temp_guess,pressure,color="k",linestyle="--", label='Pre-weighted CK, Chemical Equilibrium')
[7]:
[<matplotlib.lines.Line2D at 0x7f552c5c8f50>]
../../_images/notebooks_D_climate_4_BrownDwarf_DEQ_SC_kzz_12_1.png