**t_interpolation_state** | name | state | dependencies, | usage | |:-------------------- | ------- |:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:---------------------------------------------------------------------------------------------------------------------------------------- | | rbf_vec_coeff_e | | [large] subroutine solve_chol_v, we should use a python library for it | mo_solve_nonhydro.f90, mo_velocity_advection.f89, mo_nh_deepatmo_solve.f90, `subroutine rbf_vec_compute_coeff_edge `in `mo_intp_rbf.f90` | | rbf_vec_coeff_v | | [large]edges%cartesian_center,edges%center, (uses linear solver, we should use a python library call for this) | mo_intp_rbf.f90: inside `SUBROUTINE rbf_vec_interpol_vertex`, could be kept local | | e_bln_c_s | | [unclear] where is that computed ? | | | c_bln_avg | started | [medium] uses rotated lat, lon from subroutine rotate_latlon in mo_math_utilities.f90 , also there use python functionality, (implementation is not very diffucult though) | | | pos_on_tplane_e_x, y | | [large]uses projections, can those be taken from a python library? | | | cells_aw_verts | | [small]verts%dual_area, edges%edge_vert_length, edges%edge_vert_length (big loop with some boundary edge cases) | in a lot of interpolation calculations, diffusion , diagnostics sgs_turbulence | **t_metric_state** * **metric state** `mo_nonhydro_types.f90`>`t_nh_metrics` cacluated in `atm_dyn_iconam/mo_vertical_grid.f90` | Field | state | dependencies | used in | |:----------------------- |:----- |:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:----------------------- | | wgtfacq_c,wgtfacq_c_dsl | | metrics%z_ifc | dycore | | wgtfacq_e_dsl | | | dycore | | wgtfac_e | | exner_expol (config param), z_maxslp (ddxn_z_full), z_maxhgtd (ddxn_z_full, dual_edge_length): calculation straight forward | dycore | | exner_exfac | | metrics%ddxn_z_full, metrics%z_ifc | dycore | | d2dexdz2_fac1_mc | | [small] theta_ref_mc, inv_ddqz_z_full | | | zdiff_gradp_dsl | | [medium]z_me, z_mc , computation simple but, conditions might be a bit complicated | | | d2dexdz2_fac2_mc | | [small]theta_ref_mc, exner_ref_mc, z_mc, | | | ddxn_z_half_e | | [small]z_ddxn_z_half_e = grad_fd_norm (z_ifc, inv_dual_edge_length):mo_math_gradients.f90, which is a simple finite difference gradient stencil | | | ddxn_z_full | | [small]z_ddxn_z_half_e = grad_fd_norm (z_ifc) | | | ddqz_z_full_e | | [medium]cells2edges(ddqz_z_full, c_lin_e): has some special lateral boundary handling otherwise does c_line_e * ddqz_z_full(C2E)) | | | z_ifv | | [small] z_ifv = cells2verts_scalar(z_ifc,cells_aw_verts) | | | ddxt_z_full | | [small]z_ddxt_z_half_e = grad_fd_tang(z_ifv, tangent_orientation, primal_edge_length):mo_math_gradients.f90, again finite difference gradient , z_ifv = cells2verts(z_ifc) | | | coeff2_dwdz | | [small]ddqz_z_full, z_ifc | | | coeff1_dwdz | | [ small]ddqz_z_full, z_ifc | only velocity_advection | | scalfac_dd3d | | [medium]vct_a, depends on configuration: divdamp_type, divdamp_trans_start, divdamp_trans_end | | | kstart_dd3d | | [small]scalar on patch, calculated together with scalfac_dd3d | | | hmask_dd3d | | [large] refin_ctrl, grf_nudgezone_width, grf_nudge_start_e always a bit tedious, requires understanding the refin_ctrl thing , this is actually a boolean mask... | | | vwind_impl_wgt | | [medium] depends on config vwind_offctr, z_ddxn_z_half_e. | | | vwind_expl_wgt | | [small], 1 - vwind_impl_wgt | | | rayleigh_w | | [large] depends a_vct, damping heights | | | coeff_gradekin | | [small]edges%edge_cell_length, edges%inv_dual_edge_length(je,jb) , simple stencil | | | pg_edgeidx_dsl | metrics: z_ifc , z_me = cells2edges_scalar(z_mc) | [large, but needed] index list computed together with pg_exdist_dsl | | | pg_exdist_dsl | | [large, but needed]mask out of index list, those mask are normally constructed out of the index lists, we need to build them directly | | | bdy_halo_c | | [large] mask from index list, check the difference between the halo_c masks | dycore | | mask_prog_halo_c | | [large] mask from index list | | | mask_hdiff | | [large] mask from index list | diffusion | | zd_diffcoef_dsl | | [large] mask from index list, same list as for all the zd fields, some not-so-easy to understand loop | diffusion | | zd_intcoef_dsl | | [small] | | | zd_vertoffset_dsl | | [medium] | diffusion | | vertoffset_gradp_dsl | | [large?] in same loop as z_mc vertical offset for vertidx_gradp , flat_idx | | | | | | | | | | | |