o
    [Yb1                     @   s   d dl mZmZmZ d dlmZ d dlZd dlZd dlZd dl	Z
d dlZd dlZd dlZdd ZdddZd	d
 ZdddZdd Zdd Zdd Zdd Zdd Zdd Zedkr`ed dS dS )    )print_functiondivisionabsolute_import)rangeNc                 C   s   t | t |kS )N)collectionsCounter)xy r
   `/Users/jing/Downloads/radiative_transfer_demo/ARTDECO/artdeco/pyartdeco/f2py_utils/f2py_utils.py<lambda>   s    r   Fc                 C   s*  ddl }|r*td td td td td td td td td t }t|| ||||||||d
 t | }| jdkr[t|jdk rUtd	 t  t|j| |j	j
dkrut }|j  |rutd
t |  t }|j  t | }|rt|| t| dS |	rtj|j	jtd}t|j	j}|rtd t }t|j	jD ]F}|j|d  |j	j||< t|j	jd|j	j ttj|j	jddd|j	jf d|j	jddd|j	jf   dd  ||< qt|j	j}t| |rtdt |   |||fS t }| jdkr(|j !  n| jdkr4|j"#  n| jdkr?|j$%  |rUtd| td| tdt |  t|j	j&d|j	j'|j	jf}t|j	j'}t|j	j}t|j	j&|j	j(|j	j)|j	jf}t|j	j&|j	j(|j	j)|j	j*|j	jf}t|j	j&|j	j(|j	j)|j	j*|j	j'|j	jf}|j	j+ddddddddf |ddddddddf< |j	j,dd |dd< |j	jdd |dd< |j	j-ddddddddddf |ddddddddddf< |j	j.ddddddddddddf |ddddddddddddf< |j	j/ddddddddf |ddddddddf< t| |rtd td td td td td td td td |
r||||||fS |||||fS )z
    save_layers is either None or a directory PATH and ROOT name
               save_layers = {"PATH":string, "ROOT":string}
    r   N z$====================================z       Enter run_artdeco )kdisverbosesave_layersr      z@
 (run_artdeco) No absorbing gas although you are in Kdis mode !z"
 (run_artdeco) Get_betal time   =dtypez/
 (run_artdeco) Compute atm gas transmission...      ?axisz=
 (run_artdeco) Computed atm gas transmission in %.2e secondsdoaddisortsinscaz!
 (run_artdeco) SetVar time    = z!
 (run_artdeco) GetLayers time = z!
 (run_artdeco) RT time        =    z       Done run_artdeco )0artdecoprinttimeset_artdeco_varmodelengasabsexitselect_kdis_gasmcommonnptcleZ
mget_betalZ	get_betalZmlayersZ
get_layerssave_smartg_layers
deallocatenpzerosnlambdaintr   Zget_mono_layersZn_aitaui_mono_layerssumai_mono_layersexpgas_dtau_mono_layersgas_ssa_mono_layerscopywlambdart_modelZ
mcall_doadZ	call_doadZmcall_odZcall_odZmsinscaZcall_sinscanszanalt_atmnvzanvaanmatflux_outalt_atmsvr
svr_levelsrho_surf)
artdeco_inatmossurfacesolradptclegeomr   r   r   Zget_trans_atmZrho_surf_outputr   t0Z	t_set_varZt_get_layerZn_call_rtesZtrans_mol_atmjlambfluxZalt_fluxr=   ZradianceZradiance_levelsr
   r
   r   run_artdeco   s   



n



"(.@LX@rH   c              	   C   s  t d t| jjdkrt d t d t d t d d S t| jj| jjf}t| jj| jjf}tjtj	td| jjf| jj
d d d d f dddd|d d d d f< tjtj	td| jjf| jjd d ddd d f dddd|d d d d f< t|d	 d
 |d  d d}|d |d| jj  |d |d| jj  d}t| jjD ]}|d| jj| d   }q|d ||d  |d t| jjD ]$}d| jj|  }t| jjD ]}|d|||f   }q||d  q|  t|d	 d |d  d d}|d |d| jj  |d |d| jj  d}t| jjD ]}|d| jj| d   }q7|d ||d  |d t| jjD ]&}d| jj|  }t| jjD ]}|d|||f   }qn||d  q^|  | jjdkrt| jj| jjf}t| jj| jjf}	| jjd| jj  |	d d d d f< | jj| jj |d d d d f< tjtj	td| jjf|d d d d f dddd}
tjtj	td| jjf|	d d d d f dddd}t|d	 d |d  d d}|d |d| jj  |d |d| jj  d}t| jjD ]}|d| jj| d   }q3|d ||d  |d t| jjD ]&}d| jj|  }t| jjD ]}|d|||f   }qj||d  qZ|  t|d	 d |d  d d}|d |d| jj  |d |d| jj  d}t| jjD ]}|d| jj| d   }q|d ||d  |d t| jjD ]&}d| jj|  }t| jjD ]}|d|
||f   }q||d  q|  | jjd }tt| jjdkr+t d t d t d t  t|D ]$}tt| jj|d d f dkrRt d t d t d t  q/t|D ]|}d}tt| jjd d d||f dkrt d t d t d t  t| jjd  }tt| jjd d d||f dkrt d t d t d t  | jjd }tt| jjd d d||f dkrt d t d t d t  qXt| jjD ]}| jj| d!krt d t d" t d t  q|d	 d# |d  d }t|d}|d$| d%  t| jjd d df d&kd d }d}|d'| jj| d   |d'| jj||f   | jj|dd||f | jj|d!d||f  }| jj|dd||f | jj|d!d||f  }| jj|d d||f }t| jjd||f d( tj  }t|D ]&}d)||  d*||   d*||   d*||   d*d&  }||d%  qt| jjd  }|d'| jj| d   |d'| jj||f   | jj|dd||f | jj|d!d||f  }| jj|dd||f | jj|d!d||f  }| jj|d d||f }t| jjd||f d( tj  }t|D ]&}d)||  d*||   d*||   d*||   d*d&  }||d%  q-| jjd }|d'| jj| d   |d'| jj||f   | jj|dd||f | jj|d!d||f  }| jj|dd||f | jj|d!d||f  }| jj|d d||f }t| jjd||f d( tj  }t|D ]&}d)||  d*||   d*||   d*||   d*d&  }||d%  q|d+ |  d S d S ),Nz,(save_smartg_layers) Save layers for SMART-Gr   r   z(save_smartg_layers) ERROR zB                     No possible save if ARTDECO used in kdis moder   r   r   PATHZcTauRay_ZROOTz.datwz# Number of wavelength 
z%i 
z# Number of altitude 
z  %.6fg     @@z# Wavelengths
 
z# OD 
z  %.2fz  %.6eZcTauGas_r   ZcTauAbs_ptcle_ZcTauSca_ptcle_z(save_smartg_layers) ERRORzN                     Phase matrix angular grid must be common over wavelengths zA                     Phase matrix should be constant over layers       z>                     Used particules should all have nelem = 4Z	phasemat_z %iz 
        z %f 
     f@z %ez   %ez# 
)!r   get_charr$   r   r(   r)   r5   r*   cumsumappendgas_dtausca_layersgas_dtauabs_layersopenwriter   r2   r:   closer%   nlayersptcle_dtau_layersptcle_ssa_layersptcle_nang_phasemat_layersr    uniquer"   ptcle_u_phasemat_layersptcle_phasemat_layersr+   ptcle_nelemargwherearccospi)r   r   Zcumul_tau_rayZcumul_tau_molfsiialtZdtau_sca_ptcleZdtau_abs_ptcleZcumul_tau_sca_ptcleZcumul_tau_abs_ptcleZnangiangiwvliptclefilenameZilayM2M1ZM3angr
   r
   r   r&      sH  LP







$ 88







$
(((	
&00$800$800$8
 r&   c
           '      C   s  |rt d d| j_d| j_d| j_d| j_d| j_d| j_d| j_d| j_	d| j_
d| j_d| j_d| j_d| j_d| j_d| j_d| j_d| j_d| j_d| j_d| j_d| j_d| j_d| j_t| jjd t| jjd t| jjd | jj| j_d| j_ d| j_!d| j_"d| j_#d| j_$d| j_%d| j_&| jj'| j_(d| j_)d|j*v rd| j_|rd| j_d|j*v rt d	 t d
 t+  d|j*v rt d	 t d t+  d|j*v rd| j_
d|j*v rd| j_d|j*v rd| j_d|j*v rd| j_d|j*v rd| j_d|j*v r	d| j_d|j*v rd| j_d|j*v rd| j_d|j*v r<d| j_|jdkr<t d	 t d t d t+  | jjsF| jjrJd| j_|jdvr[t d	 t d t+  t| jj|j |jdkrqt| jj,|j, |j-dkrd| j_.d| j_/nt d t d t+  |jdkrt0|j1| j_2t34|j1| j_5n|jd krt0|j6| j_2t34|j6| j_5n|jdkrst0|j1d!kr|j1d | jj7d< |j1d | jj7d!< nEt0|j1d"kr|j1d#d# | jj7d#d#< |j1d d$krt38|j9d!d#d#f | jj7d< |j1d! d$krt3:|j9d"d#d#f | jj7d!< t3j;|j<d%d&}
d}| jj.sgt0|j1d"krdt=|j<D ]'}|j9d"|f | jj7d kra|j9d!|f | jj7d! k rad!|
|< |d! }q;nVt0|j1d!kr| jj7d |j9dd#d#f vrt d t d' t d(| jj7d  t d)|j9dd#d#f  t+  t=|j<D ]}|j9d|f |j1d krd!|
|< |d! }q|j>| j_?|j@| j_Ad| j_B|jCd*krd!| j_Bn
|jCd+krd"| j_B|j>|j@ dkrL|| j_D|jE| j_F|j3| j_G|jH| j_I|jJ| j_K|jL| j_M|j9d#d#|
d!kf | j_N|jOdkr2|| j_P|jQ| j_Q|jR|
d!k | j_R|jS|
d!k | j_Sn|| j_Pd,| j_Q|j9d|
d!kf | j_Rt3T|| j_S|j>dkr|jUd#d#|
d!kf | j_V|jWd#d#|
d!kd#d#d#d#d#d#f | j_X|jYd#d#|
d!kf | j_Z|j[d#d#|
d!kd#d#f | j_\|j]d#d# | j_^| j_`| jj? t=| jj?D ]}| j_a|d! |jb| c  q|j@dkr7|jd| j_e|jf| j_g|jhd#d#|
d!kf | j_i|jjd#d#|
d!kd#d#d#d#d#d#d#d#f | j_k|jld#d#|
d!kf | j_m|jnd#d#|
d!kd#d#f | j_o|jpd#d# | j_q| j_r| jjA t=| jjAD ]}| j_s|d! |jt| c  q%| jjNdd#d#f | j_5t0| jj5| j_2t3ju| jj2d%d&| j_v| jjvd#d# d! | jjvd#d#< nt d t d t+  nt d- t+  t0|jwd!kr|jdkrt d t d. t+  d| j_x|jw| j_wt0| jjw| j_y|jz| j_zt0| jjz| j_{|j|| j_|t0| jj|| j_}| jjrt3;| jj2| j_~n>|jdkrt3T| jj2| j_~n.|jdkr| jjS| j_~n!|jd kr|jOdkrt d t d/ t+  n	t3T| jj2| j_~t3T| jjy| j_t34g d0| j_|j| j_|j| j_|	r2t| jjd1 nt| jj|j t| jjd2vrNt d t d3 t+  t| jjd4krt|jd" }|j| j_|| j_|j| j_|j| j_| jjrt d5 t d	 t d6 t d5 t+  nqt| jjdkrt|j| jjwd | j_| jj}|j| j_|j| j_|j| j_|j| j_|j| j_| jjd!krt d5 t d	 t d7 t d5 t+  n$t| jjd1kr|j}| jjrt d5 t d	 t d8 t d5 t+  |	rt| jjd nt| jj|j t| jjd9vr"t d t d: t+  t| jjd;kr?t| jjdkr?t d t d< t+  t| jjd=krR|j| j_|j| j_t| jjd;kre|j| j_|j| j_t| jjd1kr|t| jjdkr|d| j_%nt| jjd4kr|d" | j_%n|| j_%| jj%dkr| jj%| j_&nd| j_&|j$| j_$| jj$dkr| j_| jj$ t=| jj$D ]}| j_|d! |j| c  | j_|d! |j| c  q|j| j_|j| j_|j| j_t3j| jj$dd>d&| j_|j| j_|j| j_t3;| jj$| j_t=| jj$D ]}|j| d? | jj|< qd@|jv r4|j| j_|j| j_|j| j_t3j;| jj$d%d&| j_t=| jj$D ]}|j| dA | jj|< qE|j| j_t3j;| jj$| jj2fd%d&| j_|j| jjd#d#d#d#f< t3;| jj$dB| jj2f| j_t3;| jj$| jj| jj2f| j_t3;| jj$dC| jj| jj2f| j_t3j| jj$| jj2fdtd&| j_t3j;| jj$| jj2fd%d&| j_| j_  t3;| jj$| jj2f| j_t3;| jj$dC| jj| jj2f| j_t3;| jj$| jj2f| j_|| jj5| jj%t| jj\}}}}}}}}|d#d#d#d#f | jjd#d#d#d#f< | jj%dkr| jj%| jjd#d#d#d#f< |d#d#d#d#d#d#d#d#f | jjd#d#d#d#d#d#d#d#f< |d#d#d#d#f | jjd#d#d#d#f< |d#d#d#d#f | jjd#d#d#d#f< |d#d#d#d#d#d#d#d#f | jjd#d#d#d#d#d#d#d#f< |d#d#d#d#d#d#f | jjd#d#d#d#d#d#f< |d#d#d#d#d#d#d#d#f | jjd#d#d#d#d#d#d#d#f< t=| jj2D ]}t=| jj$D ]}|jd#d# | jj|d#d#|f< qqn|	rt dD |		rd| j_d| j_	nt| jjd1k	r!|j| j_|j| j_	nd| j_d| j_	| \}}}}}t0|| j_| jjd! | j_|| j_|| j_|| j_|| j_|jd k	r[|j| j_|jdk	r|| j_t0|jƃ| j_| j_| jjǡ t=| jjǃD ]}| j_|d! |j| c  	qzt3;| jj2| j_|| jj5}|d#d# | jjd#d#< | jj| jj|dk< t0|j͠Ρ dk	r|| jj| jj5| j_|j| j_|j| j_|jdEv	rt d t dF t+  t| jj|jӃ t| jj|jփ |jdGk
r.t3;| jj2| j_|| jj5d}|| jjd#d#< | jj
r,t3| jjסdk
r,t d t dH t+  n#|jdIkrQ| jj
rDt d t dH t+  |jdJk
rdJ} t| jj|  |j| j_|j| j_|j| j_|j| j_|j| j_|j| j_t3;| jj2| j_|| jj5| jjd#d#< |j| j_n|jdKkrBdL} t| jj|  dB| j_t3;| jj| jj2f| j_dB| j_t3;| jj| jj2f| j_| jjd!k
r|| jj5d\}!}"}#|!| jjdd#d#f< |"|! | jjd!d#d#f< |#|! | jjd"d#d#f< n^|| jj5d\}!}"}#}$}%}&|!| jjdd#d#f< |"|! | jjd!d#d#f< |#|! | jjd"d#d#f< |$| jjdd#d#f< |%| jjd!d#d#f< |&| jjd"d#d#f< nt d t dM t dN t+  |j| j_| jjrq| jjdkrqt d t dH t dO t+  t3;| jj2| j_t3;| jjy| jj{| jj}| jj2f| j_t3;| jjy| jj{| jj}| jj| jj2f| j_t3;| jjy| jj{| jj}| jj| jj| jj2f| j_t3;| jjy| jj{| jj}| jj| jj2f| j_t3;| jjydB| jj| jj2f| j_| jjr-t3;| jjy| jj{| jj}| jj| jj2f| j_t3;| jjy| jj{| jj}| jj| jj| jj2f| j_t3;| jjy| jj{| jj}| jj| jj2f| j_|jdkrAt3;| jjydB| jjf| j_|rJt dP d#S d#S )Qz
    z(set_artdeco_var) start...TFZundefr   r   opt_onlyz (set_artdeco_var) ERRORz'                   opt_only not allowed
betal_onlyz)                   betal_only not allowednowarnno_rayleighthermal_only	flux_onlyprint_betalprint_recompprint_aitauiod_no_check	bottom_f0r   z$                   with -bottom_f0- z,                   rt_model must be -disort-)monor   lblz7                   mode must be -mono-, -lbl- or -kdis-r   nonez(set_artdeco_var) ERRORz,                  filter use not implementedr{   r|   r   rM   Ng      r+   r   zj                  The wvl you request is not present in your kdis (no kdis band central wvl corresponding)z%                  wvl requested    = z%                  kdis central wvl = densityZmolar_fractioni Errorz8                  Only one SZA can be provided at a timez>                  specific solrad ,ot implemented for lbl mode)r   rO   rO   rO   r   )r   r   r   z?                  rt_model must be -disort-, -sinsca- or -doad-r   rL   zF                   Thermal emission can not be accounted for with DOADz/ (set_artdeco_var) nmat must be = 1 with DISORTzJ                   Thermal emission can not be accounted for with -sinsca-)r}   dmdfitpotterzG                  trunc_method must be -none-, -potter-, -dfit- or -dm-r   z?                  Potter truncation can not be used with DISORTr   boolcext_reflambusernelemr      z(set_artdeco_var) no particle)brdflambertz<                  Surface family must be -brdf- or -lambert-r   z3                  No surface allowed if -bottom_f0-r   oceanlandZ	lisp_rossz8                  Surface kind must be -land- or -ocean-z%                  if family is -brdf-z%                  (set surf temp = 0)z(set_artdeco_var) exit)r   r$   Z	f2py_moder   rp   rq   thermalZdo_rtZsinsca_corintZsinsca_corint_brdfwarningrs   rt   ru   rv   rw   rx   ry   Z	is_secscarz   	od_deltam	od_corintod_do_secscaod_use_fisotZflag_user_vdistset_charr   trunc_methodr3   
mconstantsZundef_ir8   Zhg_flagZflag_mieZflag_hmZ	flag_baumr%   Z	nbetal_inZ	nmaxbetalZlat_ray_defaultlatlonkeywordsr"   
kdis_modelfiltersfilterZnfilterr    wavelr*   r(   arrayr2   wvl_tauabsgasZlambda_boundaminwvlbandamaxr)   nwvlr   nspkdis_nspnsp_c
kdis_nsp_cZkdis_c_descc_desc	kdis_nwvlntkdis_ntkdis_npnmaxaikdis_nmaxaitkdis_tpkdis_pkdis_wvlband
solar_speckdis_solrad_nwvlkdis_solrad_solcstekdis_solrad_wvlkdis_solrad_F0onesnaikdis_naikikdis_kixsect
kdis_xsectaikdis_aifcont
kdis_fcontmf2py_utilityZallocate_kdis_speciesset_kdis_speciesspeciesstripnckdis_ncckdis_cnai_c
kdis_nai_cki_c	kdis_ki_cxsect_ckdis_xsect_cai_c	kdis_ai_cfcont_ckdis_fcont_cZallocate_kdis_species_cset_kdis_species_c	species_carangelambda_ikdisszaZ
get_possolr4   vzar6   vaar7   f0varsol_factZsvinrQ   r+   nstreamsdoad_eps	doad_nmugdoad_nfoumxdoad_ncoef_min_brdfcheck_disort_nstrod_nstrod_accurdfit_thetacdfit_fitallpotter_theta_minpotter_theta_maxZallocate_ptcle_char_arrZset_ptcle_vdist
vdist_typeZset_ptcle_typetypeh_vdistptcle_h_vdistsd_gauss_vdistptcle_sd_gauss_vdisthgptcle_hgfullptcle_opt_interptau_reflambptcle_tau_reflambwlrefZreflambptcle_cext_reflamboptical_propertiesuser_vdist_naltptcle_user_vdist_naltuser_vdist_altptcle_user_vdist_alt
user_vdistptcle_user_vdistr`   nang_phasematZnang_maxptcle_nang_phasemat	ptcle_optptcle_u_phasematptcle_phasematr   ptcle_betal_flagptcle_nbetalZalloc_ptcle_betalptcle_trunccoeffptcle_trunc_phasematptcle_trunc_normphasematget_optptcle_betal
u_phasematcorintcorint_brdfregridr5   rY   r:   p_atmt_atm	u_air_atm	tauabsgas	lblod_atmngasu_atmgasZ
ngas_u_atmZallocate_gas_u_atmZset_gas_u_atmdepol	get_depolundef_dptau_raykeys
get_ray_odray_odtest_glitterocean_whitecapsfamilyZsurface_familyZsurface_typekindsurface_albedoget_itcount_nonzerosurface_brdf_modelwdspdZwind_spdxsalZ
ocean_xsalpclZ	ocean_pclshadowZocean_shadowsdistrZocean_distrazwZ	ocean_azwZ	ocean_rswget_Rsw_6s_glitterZocean_6s_glitterZsurface_n_par_brdfsurface_par_brdfZsurface_n_par_bpdfsurface_par_bpdftempZsurface_temp
rt_cputimer=   r;   r<   svr_sigr9   	svr_notmssvr_levels_notmssvr_sig_notmsfluxint_out)'r   r>   r?   r@   rA   rB   rC   r   r   r   Z	kdis_flagZnbandikispr   rj   optr
  phasematbetal
betal_flagtrunc_coefftrunc_phasemattrunc_normphasematiwlr:   r  r  r  r  r  Zalbedor$  isovolgeocvnrnir
   r
   r   r   p  sb  








  
8 








,  

2  "















$



$

 








 " 
"(@((@4@$


 









&,2,"
,2,r   c              
   C   s\	  d| vrg }g }t t| D ]n}t |jjD ]/}|j|d }t|tr+| }nt|t	r7t|d }|| |  krF|
|  nqt |jjD ]/}|j|d }t|tra| }nt|t	rmt|d }|| |  kr||
|  nqMq|jjdkrt|}tj|td}tj|jj|jjfdd}	t|jj|jj|jjf}
t|jj|jj|jj|jj|jjf}t|jj|jjf}t|jj}|jj}|jjd d d d f |	d d d d f< |jjd d d d d d f |
d d d d d d f< |jjd d d d d d d d d d f |d d d d d d d d d d f< |jjd d d d f |d d d d f< |jjd d  |d d < t |D ]Z}d}t |D ]2}|j|d }t|trj| }nt|t	rwt|d }|||  krd}|||< qU|dkrtd	 td
 td||  d td	 t  qM||j_t |D ]}|j|d d q|jj|jjd d d d f< |jj|jjd d d d d d f< |jj|jjd d d d d d d d d d f< |jj|jjd d d d f< |jj|jjd d < t |D ]z}|j|d ||   |	|| d d f |jj|d d f< |
|| d d d d f |jj|d d d d f< ||| d d d d d d d d f |jj|d d d d d d d d f< ||| d d f |jj|d d f< |||  |jj|< q|jjdkrt|}tj|td}tj|jj|jjfdd}t|jj|jj|jjf}t|jj|jj|jj|jj|jj|jjf}t|jj|jjf}t|jj}|jj}|jjd d d d f |d d d d f< |jj d d d d d d f |d d d d d d f< |jj!d d d d d d d d d d d d f |d d d d d d d d d d d d f< |jj"d d d d f |d d d d f< |jj#d d  |d d < t |D ]Z}d}t |D ]2}|j|d }t|tr| }nt|t	rt|d }|||  krd}|||< qj|dkrtd	 td
 td||  d td	 t  qb||j_t |D ]}|j$|d d q|jj|jjd d d d f< |jj|jj d d d d d d f< |jj|jj!d d d d d d d d d d d d f< |jj|jj"d d d d f< |jj|jj#d d < t |D ]}|j$|d ||   ||| d d f |jj|d d f< ||| d d d d f |jj |d d d d f< ||| d d d d d d d d d d f |jj!|d d d d d d d d d d f< ||| d d f |jj"|d d f< |||  |jj#|< q'd S d S d S )Nallr   utf-8r   r   r+   FTr   z(py select_kdis_gas) Errorz(py select_kdis_gas) Specie z is not defined in KDISZunkown)%r   r    r$   r   r   Zprint_kdis_species
isinstancestrr   bytesrS   r   Zprint_kdis_species_cr(   r)   r+   r   r   r   r   r   r   r   r   r   r   r"   r   r   r  r   r   r   r   r   r   r   )Z
species_inr   r   r   r7  Zisp_kdisZkdis_spnspeciesZ	old_indexZkdis_nai_oldZkdis_ai_oldZkdis_ki_oldZkdis_xsect_oldZkdis_fcont_oldZkdis_nsp_oldflagZ
nspecies_cZold_index_cZkdis_nai_c_oldZkdis_ai_c_oldZkdis_ki_c_oldZkdis_xsect_c_oldZkdis_fcont_c_oldZkdis_nsp_c_oldr
   r
   r   r#     s   








((4L(

".$0H$.(4X(

"4$0T$K)r#   c                 C   sP   t | jdkrt| d dS d}| D ]}|dkr || }q|   S d S )Nr   rG   r   rL   )r    shaperI  r   )	chartdecoZcharoutccr
   r
   r   rQ   Y  s   
rQ   c                 C   s   t | jdkrt|  |krdS dS t|tu r|}nt|}t |}t | }||kr.dS t|}t|D ]}|| ||< q7t||D ]}d||< qE|| k	 rTdS dS )Nr   TFrL   )
r    rN  rI  r   r   listr(   	chararrayr   rF  )rO  charintmpnn2charf2pyrf   r
   r
   r   cmp_charq  s&   

rX  c                 C   s   t | jdkr&t || jjkrtd t  || jjt | d  | d< d S t|tu r/|}nt|}t |}t | }|t | krHtd t  t|D ]}|| | |< qLt||D ]}d| |< qZd S )Nr   z (py) Pb in set_char()rL   .)	r    rN  r   itemsizer   r"   r   rQ  r   )rW  rS  rT  rU  rV  rf   r
   r
   r   r     s&   
r   c                 C   s  d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _	d | j _
d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d| j _d| j _d| j _d| j _d | j _d | j _d | j _d | j _ d| j _!d | j _"d | j _#d | j _$d | j _%d | j _&d | j _'d| j _(d | j _)d | j _*d | j _+d | j _,d | j _-d | j _.d | j _/d | j _0d | j _1d | j _2d | j _3d | j _4d | j _5d | j _6d | j _7d | j _8d | j _9d | j _:d | j _;d | j _<d | j _=d | j _>d | j _?d | j _@d | j _Ad | j _Bd | j _Cd | j _Dd | j _Ed | j _Fd | j _Gd | j _Hd | j _Id | j _Jd | j _Kd | j _Ld | j _Md | j _Nd | j _Od | j _Pd | j _Qd | j _Rd | j _Sd | j _Td | j _Ud | j _Vd | j _Wd | j _Xd | j _Yd | j _Zd | j _[d | j _\d | j _]d | j _^d | j __d | j _`d | j _ad | j _bd | j _cd | j _dd | j _ed | j _fd | j _gd | j _hd | j _id | j _jd | j _kd | j _ld | j _md | j _nd | j _od | j _pd | j _qd | j _rd | j _sd | j _td | j _ud | j _vd | j _wd | j _xd | j _yd | j _zd | j _{d | j _|d | j _}d | j _~d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d | j _d S )Nr   )r$   r0  Zrt_cputime_filterr   r   r   dayZh_tur   Zfilter_nameZnlamb_filterZbound_lamb_filterZlamb_filterZtrans_filterZ
solrad_wvlZ	solrad_F0r   r:   r  r  r  Z	gas_u_atmr  r  r  r   r   r   r   r   r   r   r   r   Zkdis_speciesr   r   r   r   r   r   Zkdis_species_cr   r   r   r   r   Zkdis_solrad_f0r   r2   r   r  Z
ptcle_typer   r   r   Zptcle_vdist_typer   r   r   r   r   Zptcle_opt_modelZptcle_materialZptcle_param_mie3Zptcle_nphot_hmZptcle_param_hmZptcle_param_baumZptcle_opt_exist_reflambZptcle_opt_existr`   Zptcle_flag_store_optZptcle_opt_storeZptcle_nlamb_phasemat_storeZptcle_nang_phasemat_storeZptcle_lamb_phasemat_storeZptcle_u_phasemat_storeZptcle_phasemat_storeZptcle_flag_new_optZptcle_opt_newZptcle_nlamb_phasemat_newZptcle_nang_phasemat_newZptcle_lamb_phasemat_newZptcle_u_phasemat_newZptcle_phasemat_newZptcle_ilambdaZptcle_ireflambdar   r   r   r  r  r  r	  r  r  r  r  Zmaterial_nameZmaterial_nlamb_refindZmaterial_refindZ
nai_layersZ	ai_layersrU   Zptcle_dtauabs_layersZtot_dtausca_layersZnbetal_layersZbetal_layersrZ   r[   r\   r^   r_   rT   Zptcle_dtau_layers_unscaledZptcle_ssa_layers_unscaledZptcle_ssa_layers_tmsZptcle_phasemat_tms_layersZptcle_phasemat_actual_layersZptcle_phasemat_delta_layersZptcle_u_phasemat_delta_layersZptcle_secsca_mu_eqZptcle_secsca_neg_phasZptcle_secsca_norm_phasr-   Ztot_dtau_mono_layersZssa_mono_layersr/   r0   r!  r-  r.  r=   r;   r<   r1  r2  r3  r4  r9   r5  Z
svr_filterZsvr_sig_filterZflux_filterZ	lamb_baumZde_baumZmu_baumZ	cext_baumZssa_baumZg_baumZptcle_phasemat_baum)r   r
   r
   r   r'     s,  r'   c                 C   s   d}d}| }t |t j d }|dk r/td td td td td td t  |sZt jjt|d \}}d	| d	 }d
t 	|| | |k v rV|d }nd
}|r1|S )Ng-C6?FrP   r   r   z(check_disort_nstr) ERRORz((check_disort_nstr) mu0 must be positiverM   g      ?T)
r(   cosrc   r   r"   
polynomiallegendreleggaussr+   abs)nstreams_initr   tolvalidr   mu0GMTZwghtr
   r
   r   r   z  s(   
r   __main__zf2py_utils is a library)NFNFF)NFN)
__future__r   r   r   builtinsr   sysosstringnumpyr(   h5pyr   r   comparerH   r&   r   r#   rQ   rX  r   r'   r   __name__r   r
   r
   r
   r   <module>   s:   
| 
]    ] #, ;!