ICFERST  25-11
Reservoir simulator based on DCVFEM, Dynamic Mesh optimisation and Surface-based modelling
cv-adv-dif.F90 File Reference
#include "fdebug.h"
#include "petsc_legacy.h"
Include dependency graph for cv-adv-dif.F90:

Data Types

interface  cv_advection::dg_derivs_all
 calculates derivatives of vector fields More...
 
interface  cv_advection::pack_loc_all
 Packs field together to be later on used for high order computations. More...
 

Modules

module  cv_advection
 This module contains all the tools to assemble and solve the equations and fields associated with the CV mesh, i.e. transport equation, continuity equation, DCVFE gradient matrix and the Laplacian system for the zeta-potential.
 

Functions/Subroutines

subroutine cv_advection::cv_assemb (state, packed_state, final_phase, Mdims, CV_GIdims, CV_funs, Mspars, ndgln, Mdisopt, Mmat, upwnd, tracer, velocity, density, multi_absorp, DIAG_SCALE_PRES, DIAG_SCALE_PRES_COUP, INV_B, DEN_ALL, DENOLD_ALL, CV_DISOPT, CV_DG_VEL_INT_OPT, DT, CV_THETA, CV_BETA, SUF_SIG_DIAGTEN_BC, DERIV, CV_P, SOURCT_ALL, ABSORBT_ALL, VOLFRA_PORE, VOLFRA_PORE_TOTAL, GETCV_DISC, GETCT, IGOT_T2, IGOT_THETA_FLUX, GET_THETA_FLUX, USE_THETA_FLUX, THETA_FLUX, ONE_M_THETA_FLUX, THETA_FLUX_J, ONE_M_THETA_FLUX_J, THETA_GDIFF, MEAN_PORE_CV, MEAN_PORE_CV_TOTAL, MASS_MN_PRES, THERMAL, got_free_surf, MASS_SUF, MASS_ELE_TRANSP, TDIFFUSION, saturation, VAD_parameter, Phase_with_Pc, Courant_number, Permeability_tensor_field, calculate_mass_delta, eles_with_pipe, pipes_aux, porous_heat_coef, porous_heat_coef_old, outfluxes, solving_compositional, nonlinear_iteration, assemble_collapsed_to_one_phase)
 This subroutines generates the transport equation for a cv field. It also can generate the Continuity equation if GETCT = .true. and also generate the gradient matrix of the momentum equation for the DCVFE method if the option is activated. More...
 
subroutine apply_eno_2_t (LIMF, T_ALL, TOLD_ALL, FEMT_ALL, FEMTOLD_ALL, INCOME, INCOMEOLD, IGOT_T_PACK, CV_NODI, CV_NODJ, X_NODI, X_NODJ, CV_ILOC, CV_JLOC, ELE, CV_NONODS, NDIM, NPHASE, CV_NLOC, TOTELE, X_NDGLN, CV_NDGLN, X_ALL, FACE_ELE, NFACE, BETWEEN_ELEMENTS, SCVFEN, SCVFENx, GI, INV_JAC, UGI, on_domain_boundary)
 
subroutine tri_tet_loccords (Xpt, LOCCORDS, X_CORNERS_ALL, NDIM, CV_NLOC)
 
subroutine dump_multiphase (prefix, icp)
 
logical function has_anisotropic_diffusion (tracer)
 
subroutine get_int_t_den_new (LIMF)
 Computes the flux between CVs. More...
 
subroutine get_int_vel_orig_new (NDOTQNEW, NDOTQ, INCOME, LOC_T_I, LOC_T_J, LOC_DEN_I, LOC_DEN_J, LOC_NU, LOC2_NU, NUGI_ALL, UGI_COEF_ELE_ALL, UGI_COEF_ELE2_ALL, not_OLD_VEL)
 Computes the flux between CVs. More...
 
subroutine get_int_vel_porous_vel (NDOTQNEW, NDOTQ, INCOME, LOC_T_I, LOC_T_J, LOC_FEMT, LOC_NU, LOC2_NU, SLOC_NU, UGI_COEF_ELE_ALL, UGI_COEF_ELE2_ALL, I_adv_coef, I_adv_coef_grad, J_adv_coef, J_adv_coef_grad, I_inv_adv_coef, J_inv_adv_coef, UDGI_ALL, MASS_CV_I, MASS_CV_J, TUPWIND_IN, TUPWIND_OUT, not_OLD_VEL)
 Computes the flux between CVs for porous media. NDOTQNEW contains the fluxes for a given gauss integration point. More...
 
subroutine face_theta_many (FTHETA, INTERFACE_TRACK, T_NODJ_IPHA, T_NODI_IPHA, TOLD_NODJ_IPHA, TOLD_NODI_IPHA)
 
subroutine get_neigbouring_lists (JCOUNT_KLOC, ICOUNT_KLOC, JCOUNT_KLOC2, ICOUNT_KLOC2, C_JCOUNT_KLOC, C_ICOUNT_KLOC, C_JCOUNT_KLOC2, C_ICOUNT_KLOC2)
 
subroutine mass_conservation_check_and_outfluxes (calculate_mass_delta, outfluxes, DEN_ALL, flag)
 
pure subroutine cv_advection::onvdlim_ano_many (NFIELD, TDLIM, TDCEN, INCOME, ETDNEW_PELE, ETDNEW_PELEOT, XI_LIMIT, TUPWIN, TUPWI2, DENOIN, CTILIN, DENOOU, CTILOU, FTILIN, FTILOU)
 This sub calculates the limited face values TDADJ(1...SNGI) from the central difference face values TDCEN(1...SNGI) using a NVD shceme. INCOME(1...SNGI)=1 for incomming to element ELE else =0. LIBETA is the flux limiting parameter. TDMAX(PELE)=maximum of the surrounding 6 element values of element PELE. TDMIN(PELE)=minimum of the surrounding 6 element values of element PELE. PELEOT=element at other side of current face. ELEOT2=element at other side of the element ELEOTH. ELESID=element next to oposing current face. DENOIN, CTILIN, DENOOU, CTILOU, FTILIN, FTILOU => memory The elements are arranged in this order: ELEOT2,ELE, PELEOT, ELESID. More...
 
subroutine cv_advection::is_field_constant (IGOT_T_CONST, IGOT_T_CONST_VALUE, T_ALL, CV_NONODS)
 Checks whether a field is constant or not. Although I think this check is terrible, no alternatives have provided the same functionality so far. More...
 
subroutine cv_advection::pack_loc (LOC_F, T_ALL, NPHASE, IPT, IGOT_T_PACK)
 Copies memory into the same large array to then perform a projection from CV to FE. More...
 
subroutine cv_advection::unpack_loc (LOC_F, T_ALL, NPHASE, IPT, IGOT_T_PACK, IGOT_T_CONST, IGOT_T_CONST_VALUE)
 If PACK then UNpack loc_f into T_ALL as long at IGOT_T==1 and STORE and not already in storage. More...
 
subroutine cv_advection::pack_or_unpack_loc (LOC_F, T_ALL, NPHASE, NFIELD, IPT, PACK, STORE, IGOT_T)
 If PACK then pack T_ALL into LOC_F as long at IGOT_T==1 and STORE and not already in storage. More...
 
subroutine cv_advection::pack_loc_all1 (LOC_F, field1, oldfield1, field2, oldfield2, field3, oldfield3, IGOT_T_PACK, use_volume_frac_T2, nfield)
 This subroutine is for fields that have already size final_phase - 1 Checks if the fields are constant or not, stored in IGOT_T_PACK, based on that introduces the field into LOC_F to later on apply the limiters on all the fields at once. More...
 
subroutine cv_advection::pack_loc_all2 (LOC_F, field1, oldfield1, field2, oldfield2, field3, oldfield3, IGOT_T_PACK, use_volume_frac_T2, start_phase, final_phase, nodi)
 This subrotuine is for fields that are bigger than final_phase - start_phase Checks if the fields are constant or not, stored in IGOT_T_PACK, based on that introduces the field into LOC_F to later on apply the limiters on all the fields at once. More...
 
subroutine cv_advection::pack_loc_all3 (LOC_F, field1, oldfield1, field2, oldfield2, field3, oldfield3, IGOT_T_PACK, use_volume_frac_T2, start_phase, final_phase, nodi)
 This subrotuine is for fields that are bigger than final_phase - start_phase Checks if the fields are constant or not, stored in IGOT_T_PACK, based on that introduces the field into LOC_F to later on apply the limiters on all the fields at once. This one is for integer fields. More...
 
subroutine i_pack_loc (LOC_F, T_ALL, NPHASE, IPT, IGOT_T_PACK)
 If PACK then pack T_ALL into LOC_F as long at IGOT_T==1 and STORE and not already in storage. More...
 
subroutine cv_advection::i_pack_loc (LOC_F, T_ALL, NPHASE, IPT, IGOT_T_PACK)
 If PACK then pack T_ALL into LOC_F as long at IGOT_T==1 and STORE and not already in storage. More...
 
subroutine cv_advection::unpack_loc_all (LOC_F, field1, oldfield1, field2, oldfield2, field3, oldfield3, IGOT_T_PACK, IGOT_T_CONST, IGOT_T_CONST_VALUE, use_volume_frac_T2, nfield)
 If PACK then UNpack loc_f into T_ALL as long at IGOT_T==1 and STORE and not already in storage. Checks if the fields are constant or not, stored in IGOT_T_PACK, based on that introduces the LOC_F into the field or use a constant value. This is after the limiters have been applied. More...
 
integer function cv_advection::cv_count_faces (Mdims, CV_ELE_TYPE, CV_GIdims)
 This subroutine counts then number of faces in the control volume space. More...
 
subroutine cv_advection::find_other_side_fast (CV_OTHER_LOC, CV_NLOC, INTEGRAT_AT_GI, X_NLOC, X_NDGLN, CV_SNLOC, CVFEM_ON_FACE, X_SHARE, ELE, ELE2, FINELE, COLELE, DISTCONTINUOUS_METHOD)
 We are on the boundary or next to another element. Determine CV_OTHER_LOC CVFEM_ON_FACE(CV_KLOC,GI)=.TRUE. if CV_KLOC is on the face that GI is centred on. Look for these nodes on the other elements. ELE2=0 also when we are between elements but are trying to integrate across the middle of a CV. More...
 
subroutine cv_advection::find_other_side (CV_OTHER_LOC, CV_NLOC, U_OTHER_LOC, U_NLOC, MAT_OTHER_LOC, INTEGRAT_AT_GI, X_NLOC, XU_NLOC, X_NDGLN, XU_NDGLN, CV_SNLOC, CVFEM_ON_FACE, X_SHARE, ELE, ELE2, FINELE, COLELE, DISTCONTINUOUS_METHOD)
 We are on the boundary or next to another element. Determine CV_OTHER_LOC, U_OTHER_LOC. CVFEM_ON_FACE(CV_KLOC,GI)=.TRUE. if CV_KLOC is on the face that GI is centred on. Look for these nodes on the other elements. ELE2=0 also when we are between elements but are trying to integrate across the middle of a CV. More...
 
subroutine cv_advection::proj_cv_to_fem (packed_state, fempsi, psi, Mdims, CV_GIdims, CV_funs, Mspars, ndgln, igetct, X, mass_ele, mass_mn_pres, tracer, psi_ave, psi_int, activate_limiters)
 Calls to generate the transport equation for the saturation. Embeded an FPI with backtracking method is uncluded Subroutine description: (1) determine FEMT (finite element wise) etc from T (control volume wise) (2) (optional) calculate psi_int (area) and psi_ave (barycentre) over each CV. More...
 
subroutine cv_advection::dg_derivs_all1 (FEMT, FEMTOLD, DTX_ELE, DTOLDX_ELE, NDIM, NPHASE, NCOMP, TOTELE, CV_NDGLN, XCV_NDGLN, X_NLOC, X_NDGLN, CV_NGI, CV_NLOC, CVWEIGHT, N, NLX, NLY, NLZ, X_N, X_NLX, X_NLY, X_NLZ, X_NONODS, X, Y, Z, NFACE, FACE_ELE, CV_SLOCLIST, X_SLOCLIST, CV_SNLOC, X_SNLOC, WIC_T_BC, SUF_T_BC, SBCVNGI, SBCVFEN, SBWEIGH, X_SBCVFEN, X_SBCVFENSLX, X_SBCVFENSLY, get_gradU, state, P0Mesh)
 calculates derivatives of vector fields More...
 
subroutine cv_advection::dg_derivs_all2 (FEMT, FEMTOLD, DTX_ELE, DTOLDX_ELE, NDIM, NPHASE, TOTELE, CV_NDGLN, XCV_NDGLN, X_NLOC, X_NDGLN, CV_NGI, CV_NLOC, CVWEIGHT, N, NLX, NLY, NLZ, X_N, X_NLX, X_NLY, X_NLZ, X_NONODS, X, Y, Z, NFACE, FACE_ELE, CV_SLOCLIST, X_SLOCLIST, CV_SNLOC, X_SNLOC, WIC_T_BC, SUF_T_BC, SBCVNGI, SBCVFEN, SBWEIGH, X_SBCVFEN, X_SBCVFENSLX, X_SBCVFENSLY, P0Mesh)
 Computes the derivatives of vector fields. More...
 
subroutine cv_advection::diffus_cal_coeff (DIFF_COEF_DIVDX, DIFF_COEFOLD_DIVDX, CV_NLOC, MAT_NLOC, NPHASE, MAT_NDGLN, SMATFEN, SCVFEN, GI, NDIM, TDIFFUSION, HDC, T_CV_NODJ, T_CV_NODI, TOLD_CV_NODJ, TOLD_CV_NODI, ELE, ELE2, CVNORMX_ALL, LOC_DTX_ELE_ALL, LOC_DTOLDX_ELE_ALL, LOC2_DTX_ELE_ALL, LOC2_DTOLDX_ELE_ALL, LOC_WIC_T_BC, CV_OTHER_LOC, MAT_OTHER_LOC, CV_SNLOC, CV_SLOC2LOC, on_domain_boundary, between_elements, has_anisotropic_diffusivity)
 This sub calculates the effective diffusion coefficientd DIFF_COEF_DIVDX, DIFF_COEFOLD_DIVDX based on a non-linear method and a non-oscillating scheme. It requires the derivatives of the field obtained using DG_DERIVS_ALL DG_DERIVS_ALL. More...
 
subroutine cv_advection::linear_high_diffus_cal_coeff_stress_or_tensor (STRESS_IJ_ELE_EXT, S_INV_NNX_MAT12, STRESS_FORM, STRESS_FORM_STAB, ZERO_OR_TWO_THIRDS, U_SNLOC, U_NLOC, CV_SNLOC, NPHASE, SBUFEN_REVERSED, SBCVFEN_REVERSED, SDETWEI, SBCVNGI, NDIM, SLOC_UDIFFUSION, SLOC_UDIFFUSION_VOL, SLOC2_UDIFFUSION, SLOC2_UDIFFUSION_VOL, DIFF_GI_ADDED, ON_BOUNDARY, SNORMXN_ALL)
 This sub calculates the effective diffusion coefficientd STRESS_IJ_ELE_EXT it only works for between element contributions. based on a high order scheme. The matrix S_INV_NNX_MAT12 is used to calculate the rows of the matrix with STRESS_IJ_ELE_EXT. This implements the stress and tensor form of diffusion and calculates a jump conidition. which is in DIFF_COEF_DIVDX, DIFF_COEFOLD_DIVDX The coefficient are in N_DOT_DKDU, N_DOT_DKDUOLD. look at the manual DG treatment of viscocity. More...
 
subroutine cv_advection::calc_stress_ten (STRESS_IJ, ZERO_OR_TWO_THIRDS, NDIM, UFENX_ILOC, UFENX_JLOC, TEN_XX, TEN_VOL)
 determine stress form of viscocity... More...
 
subroutine cv_advection::calc_stress_ten_reduce (STRESS_IJ, ZERO_OR_TWO_THIRDS, NDIM, FEN_TEN_XX, FEN_TEN_VOL, UFENX_JLOC)
 determine stress form of viscocity... More...
 
subroutine cv_advection::cal_lim_vol_adjust (TMIN_STORE, TMIN, T, TMIN_NOD, RESET_STORE, MASS_CV, CV_NODI_IPHA, CV_NODJ_IPHA, IPHASE, CV_NONODS, INCOME)
 Adjust TMIN to take into account different sized CV's. if RESET_STORE then reset TMIN to orginal values. More...
 
subroutine cv_advection::dgsimplnorm_all (NLOC, SNLOC, NDIM, XL_ALL, XSL_ALL, NORMX_ALL)
 Form approximate surface normal (NORMX_ALL(1),NORMX_ALL(2),NORMX_ALL(3)) More...
 
subroutine cv_advection::dgsimplnorm (ELE, SILOC2ILOC, NLOC, SNLOC, XONDGL, X, Y, Z, NORMX, NORMY, NORMZ)
 Form approximate surface normal (NORMX,NORMY,NORMZ) More...
 
subroutine cv_advection::isotropic_limiter_all (T_ALL, TOLD_ALL, T2_ALL, T2OLD_ALL, DEN_ALL, DENOLD_ALL, IGOT_T2, NPHASE, CV_NONODS, nsmall_colm, SMALL_CENTRM, SMALL_FINDRM, SMALL_COLM, STOTEL, CV_SNLOC, CV_SNDGLN, SUF_T_BC_ALL, SUF_T2_BC_ALL, SUF_D_BC_ALL, WIC_T_BC_ALL, WIC_T2_BC_ALL, WIC_D_BC_ALL, MASS_CV, TOLDUPWIND_MAT_ALL, DENOLDUPWIND_MAT_ALL, T2OLDUPWIND_MAT_ALL, TUPWIND_MAT_ALL, DENUPWIND_MAT_ALL, T2UPWIND_MAT_ALL)
 Computes the limited values at the interface, not as generic as the anisotropic one and never used actually... More...
 
subroutine surro_cv_minmax (TMAX_ALL, TMIN_ALL, TOLDMAX_ALL, TOLDMIN_ALL, DENMAX_ALL, DENMIN_ALL, DENOLDMAX_ALL, DENOLDMIN_ALL, T2MAX_ALL, T2MIN_ALL, T2OLDMAX_ALL, T2OLDMIN_ALL, T_ALL, TOLD_ALL, T2_ALL, T2OLD_ALL, DEN_ALL, DENOLD_ALL, IGOT_T2, NPHASE, CV_NONODS, FINACV, COLACV, STOTEL, CV_SNLOC, CV_SNDGLN, SUF_T_BC_ALL, SUF_T2_BC_ALL, SUF_D_BC_ALL, WIC_T_BC_ALL, WIC_T2_BC_ALL, WIC_D_BC_ALL, TMIN_NOD_ALL, TMAX_NOD_ALL, TOLDMIN_NOD_ALL, TOLDMAX_NOD_ALL, T2MIN_NOD_ALL, T2MAX_NOD_ALL, T2OLDMIN_NOD_ALL, T2OLDMAX_NOD_ALL, DENMIN_NOD_ALL, DENMAX_NOD_ALL, DENOLDMIN_NOD_ALL, DENOLDMAX_NOD_ALL)
 For each node, find the largest and smallest value of T and DENSITY for both the current and previous timestep, out of the node value and all its surrounding nodes including Dirichlet b.c's. More...
 
subroutine calc_limit_matrix_max_min (TMAX_ALL, TMIN_ALL, DENMAX_ALL, DENMIN_ALL, T2MAX_ALL, T2MIN_ALL, T_ALL, T2_ALL, DEN_ALL, IGOT_T2, NPHASE, CV_NONODS, TMIN_NOD_ALL, TMAX_NOD_ALL, T2MIN_NOD_ALL, T2MAX_NOD_ALL, DENMIN_NOD_ALL, DENMAX_NOD_ALL, NSMALL_COLM, SMALL_FINDRM, SMALL_COLM, TUPWIND_MAT_ALL, DENUPWIND_MAT_ALL, T2UPWIND_MAT_ALL, MASS_CV)
 Populate limiting matrix based on max and min values For each node, find the largest and smallest value of T and DENSITY for both the current and previous timestep, out of the node value and all its surrounding nodes including Dirichlet b.c's. More...
 
subroutine cv_advection::calc_sele (ELE, ELE3, SELE, CV_SILOC, CV_ILOC, U_SLOC2LOC, CV_SLOC2LOC, FACE_ELE, gi, CV_funs, Mdims, CV_GIdims, CV_NDGLN, U_NDGLN, CV_SNDGLN, U_SNDGLN)
 Calculate surface element, surface control volume: SELE, CV_SILOC, U_SLOC2LOC, CV_SLOC2LOC for a face on the boundary of the domain. More...
 
subroutine cv_advection::put_in_ct_rhs (GET_C_IN_CV_ADVDIF_AND_CALC_C_CV, ct_rhs_phase_cv_nodi, ct_rhs_phase_cv_nodj, final_phase, Mdims, CV_funs, ndgln, Mmat, GI, between_elements, on_domain_boundary, ELE, ELE2, SELE, HDC, MASS_ELE, JCOUNT_KLOC, JCOUNT_KLOC2, ICOUNT_KLOC, ICOUNT_KLOC2, C_JCOUNT_KLOC, C_JCOUNT_KLOC2, C_ICOUNT_KLOC, C_ICOUNT_KLOC2, U_OTHER_LOC, U_SLOC2LOC, CV_SLOC2LOC, SCVDETWEI, CVNORMX_ALL, DEN_ALL, CV_NODI, CV_NODJ, WIC_U_BC_ALL, WIC_P_BC_ALL, SUF_P_BC_ALL, UGI_COEF_ELE_ALL, UGI_COEF_ELE2_ALL, NDOTQ, NDOTQOLD, LIMT, LIMDT, LIMDTOLD, LIMT_HAT, NDOTQ_HAT, FTHETA_T2, ONE_M_FTHETA_T2OLD, FTHETA_T2_J, ONE_M_FTHETA_T2OLD_J, integrate_other_side_and_not_boundary, loc_u, THETA_VEL, UDGI_IMP_ALL, RCON, RCON_J, NDOTQ_IMP, X_ALL, SUF_D_BC_ALL, gravty)
 This subroutine caculates the discretised cty eqn acting on the velocities i.e. MmatCT, MmatCT_RHS It also computes the gradient matrix using the DCVFE method. More...
 
subroutine introduce_c_cv_boundary_conditions (Bound_ele_correct)
 This subroutine populates Bound_ele_correct and Bound_ele2_correct to properly apply the BCs when creating the MmatC_CV matrix. More...
 
subroutine cv_advection::calc_anisotrop_lim (Mmat, T_ALL, TOLD_ALL, DEN_ALL, DENOLD_ALL, T2_ALL, T2OLD_ALL, FEMT_ALL, FEMTOLD_ALL, FEMDEN_ALL, FEMDENOLD_ALL, FEMT2_ALL, FEMT2OLD_ALL, USE_FEMT, TUPWIND_MAT_ALL, TOLDUPWIND_MAT_ALL, DENUPWIND_MAT_ALL, DENOLDUPWIND_MAT_ALL, T2UPWIND_MAT_ALL, T2OLDUPWIND_MAT_ALL, IGOT_T2, NPHASE, CV_NONODS, CV_NLOC, TOTELE, CV_NDGLN, SMALL_FINDRM, SMALL_CENTRM, SMALL_COLM, NSMALL_COLM, X_NDGLN, X_NONODS, NDIM, X_ALL, XC_CV_ALL, use_reflect)
 For the anisotropic limiting scheme we find the upwind values by interpolation using the subroutine FINPTS or IFINPTS; the upwind value for each node pair is stored in the matrices TUPWIND AND. More...
 
subroutine calc_anisotrop_lim_vals (Mmat, T_ALL, FEMT_ALL, USE_FEMT, TUPWIND_ALL, NFIELD, NONODS, CV_NLOC, TOTELE, CV_NDGLN, SMALL_FINDRM, SMALL_COLM, NSMALL_COLM, X_NDGLN, X_NONODS, NDIM, X_ALL, XC_CV_ALL, use_reflect)
 
subroutine calc_anisotrop_lim_vals2 (Mmat, T_ALL, FEMT_ALL, USE_FEMT, TUPWIND_ALL, NFIELD, NONODS, NLOC, NGI, TOTELE, NDGLNO, FINDRM, COLM, NCOLM, X_NDGLN, X_NONODS, NDIM, X_ALL, XC_CV_ALL, N, NLX_ALL, WEIGHT, use_reflect)
 
subroutine getstoreelewei (PSI_ALL, NFIELD, NONODS, NLOC, TOTELE, NDGLNO, MATPSI_ALL, FINDRM, COLM, NCOLM, BOUND, ELEMATPSI, ELEMATWEI)
 use the stored interpolation coeffs to caclulate MATPSI. This sub finds the matrix values MATPSI for a given point on the stencil More...
 
subroutine minmaxelewic (PSI_ALL, NONODS, NLOC, TOTELE, NDGLNO, FINDRM, COLM, NCOLM, MINPSI, MAXPSI)
 This sub calculates the max and min values of PSI in local vacinity of an element. More...
 
subroutine finptsstore (PSI_ALL, FEMPSI_ALL, USE_FEMPSI, NFIELD, NONODS, NLOC, NGI, TOTELE, NDGLNO, MATPSI_ALL, FINDRM, COLM, NCOLM, NDIM, X_NDGLN, X_NONODS, X_ALL, XC_CV_ALL, N, NLX_ALL, WEIGHT, FINDELE, COLELE, NCOLEL, ELEMATPSI, ELEMATWEI, IGETSTOR, BOUND, REFLECT)
 This sub finds the matrix values MATPSI for a given point on the stencil IF IGETSTOR=1 then get ELEMATPSI,ELEMATWEI. More...
 
subroutine matptsstore (MATPSI_ALL, COUNT, NFIELD, NOD, XNOD, PSI_ALL, FEMPSI_ALL, USE_FEMPSI, NONODS, X_NONODS, NLOC, TOTELE, X_NDGLN, NDGLNO, X1_ALL, X2_ALL, NORMX1_ALL, X_ALL, FINDELE, COLELE, NCOLEL, MINPSI, MAXPSI, ELEWIC, LOCCORDSK, BOUND, REFLECT, NDIM)
 This sub calculates the value of PSI that would be at the other side of the stencil if we had a linear variation and within a single element. IF BOUND then make locally bounded. More...
 
subroutine philnodele (NONODS, FINDELE, COLELE, NCOLEL, MXNCOLEL, TOTELE, NLOC, NDGLNO, NLIST, INLIST)
 This sub calculates the node to element list FINDELE,COLELE. More...
 
subroutine conv_quad_to_lin_tri_tet (ndgln_p2top1, nloc_lin, cv_nloc, sub_lin_totele)
 convert quadratic element into a series of linear elements... More...
 
subroutine cv_advection::triloccords (Xp, Yp, Zp, N1, N2, N3, N4, X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4)
 
subroutine cv_advection::triloccords2d (Xp, Yp, N1, N2, N3, X1, Y1, X2, Y2, X3, Y3)
 
logical function cv_advection::shock_front_in_ele (ele, Mdims, sat, ndgln, Imble_frac)
 Detects whether the element has a shockfront or not. More...
 
subroutine cv_advection::generate_laplacian_system (Mdims, packed_state, ndgln, Mmat, Mspars, CV_funs, CV_GIdims, Sigma_field, Solution, K_fields, F_fields, intface_val_type)
 : In this method we assemble and solve the Laplacian system using at least P1 elements The equation solved is the following: Div sigma Grad X = - SUM (Div K Grad F) with Neuman BCs = 0 where K and F are passed down as a vector. Therefore for n entries the SUM will be performed over n fields Example: F = (3, nphase, cv_nonods) would include three terms in the RHS and the same for K If harmonic average then we perform the harmonic average of sigma and K IMPORTANT: This subroutine requires the PHsparsity to be generated Note that this method solves considering FE fields. If using CV you may incur in an small error. More...
 
real function get_diff_coef_divdx (intface_type, HDC, W_i, W_j, Value_i, Value_j, sigma_i, sigma_j)
 : Computes the effective value of K or sigma. at the interface between CVs Based on the intface_type integer: 0 = no interpolation; 1 Harmonic mean; !20 for SelfPotential solver, harmonic mean considering charge; negative normal mean More...
 
subroutine cv_advection::scvdetnx (Mdims, ndgln, X_ALL, CV_funs, CV_GIdims, on_domain_boundary, between_elements, ELE, GI, SCVDETWEI, CVNORMX_ALL, XC_ALL, X_NOD, X_NODJ)
 
subroutine cv_advection::saturation_assemb (petsc_ACV, state, packed_state, final_phase, Mdims, CV_GIdims, CV_funs, Mspars, ndgln, Mdisopt, Mmat, upwnd, saturation, sat_prev, velocity, density, DEN_ALL, DENOLD_ALL, DT, SUF_SIG_DIAGTEN_BC, CV_P, SOURCT_ALL, VOLFRA_PORE, VAD_parameter, Phase_with_Pc, eles_with_pipe, pipes_aux, assemble_collapsed_to_one_phase, getResidual)
 
subroutine get_int_vel_porous_vel (NDOTQNEW, NDOTQ, INCOME, LOC_T_I, LOC_T_J, LOC_NU, SLOC_NU, UGI_COEF_ELE_ALL, I_inv_adv_coef, J_inv_adv_coef, UDGI_ALL, MASS_CV_I, MASS_CV_J)
 Computes the flux between CVs for porous media. NDOTQNEW contains the fluxes for a given gauss integration point. More...
 
subroutine get_neigbouring_lists (JCOUNT_KLOC, ICOUNT_KLOC, C_JCOUNT_KLOC, C_ICOUNT_KLOC)
 

Variables

integer, parameter cv_advection::wic_t_bc_dirichlet = 1
 
integer, parameter cv_advection::wic_t_bc_robin = 2
 
integer, parameter cv_advection::wic_t_bc_diri_adv_and_robin = 3
 
integer, parameter cv_advection::wic_d_bc_dirichlet = 1
 
integer, parameter cv_advection::wic_u_bc_dirichlet = 1
 
integer, parameter cv_advection::wic_u_bc_robin = 2
 
integer, parameter cv_advection::wic_u_bc_diri_adv_and_robin = 3
 
integer, parameter cv_advection::wic_u_bc_dirichlet_inout = 2
 
integer, parameter cv_advection::wic_p_bc_dirichlet = 1
 
integer, parameter cv_advection::wic_p_bc_free = 2
 

Function/Subroutine Documentation

◆ apply_eno_2_t()

subroutine cv_assemb::apply_eno_2_t ( real, dimension(:), intent(inout)  LIMF,
real, dimension(:,:), intent(in)  T_ALL,
real, dimension(:,:), intent(in)  TOLD_ALL,
real, dimension(:,:), intent(in)  FEMT_ALL,
real, dimension(:,:), intent(in)  FEMTOLD_ALL,
real, dimension(:), intent(in)  INCOME,
real, dimension(:), intent(in)  INCOMEOLD,
logical, dimension(:,:), intent(in)  IGOT_T_PACK,
integer, intent(in)  CV_NODI,
integer, intent(in)  CV_NODJ,
integer, intent(in)  X_NODI,
integer, intent(in)  X_NODJ,
integer, intent(in)  CV_ILOC,
integer, intent(in)  CV_JLOC,
integer, intent(in)  ELE,
integer, intent(in)  CV_NONODS,
integer, intent(in)  NDIM,
integer, intent(in)  NPHASE,
integer, intent(in)  CV_NLOC,
integer, intent(in)  TOTELE,
integer, dimension(:), intent(in)  X_NDGLN,
integer, dimension(:), intent(in)  CV_NDGLN,
real, dimension(:,:), intent(in)  X_ALL,
integer, dimension(:,:), intent(in)  FACE_ELE,
integer, intent(in)  NFACE,
logical, intent(in)  BETWEEN_ELEMENTS,
real, dimension(:,:), intent(in)  SCVFEN,
real, dimension(:,:,:), intent(in)  SCVFENx,
integer, intent(in)  GI,
real, dimension(:,:,:), intent(in)  INV_JAC,
real, dimension(:,:), intent(in)  UGI,
logical, intent(in)  on_domain_boundary 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ calc_anisotrop_lim_vals()

subroutine calc_anisotrop_lim::calc_anisotrop_lim_vals ( type (multi_matrices), intent(inout)  Mmat,
real, dimension( :, : ), intent(in)  T_ALL,
real, dimension( :, : ), intent(in)  FEMT_ALL,
logical, intent(in)  USE_FEMT,
real, dimension( :, : ), intent(inout)  TUPWIND_ALL,
integer, intent(in)  NFIELD,
integer, intent(in)  NONODS,
integer, intent(in)  CV_NLOC,
integer, intent(in)  TOTELE,
integer, dimension( : ), intent(in)  CV_NDGLN,
integer, dimension( : ), intent(in)  SMALL_FINDRM,
integer, dimension( : ), intent(in)  SMALL_COLM,
integer, intent(in)  NSMALL_COLM,
integer, dimension( : ), intent(in)  X_NDGLN,
integer, intent(in)  X_NONODS,
integer, intent(in)  NDIM,
real, dimension( :, : ), intent(in)  X_ALL,
real, dimension( ndim, nonods ), intent(in)  XC_CV_ALL,
logical, intent(in)  use_reflect 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ calc_anisotrop_lim_vals2()

subroutine calc_anisotrop_lim::calc_anisotrop_lim_vals2 ( type (multi_matrices), intent(inout)  Mmat,
real, dimension( :,: ), intent(in)  T_ALL,
real, dimension( :,: ), intent(in)  FEMT_ALL,
logical, intent(in)  USE_FEMT,
real, dimension( :,: ), intent(inout)  TUPWIND_ALL,
integer, intent(in)  NFIELD,
integer, intent(in)  NONODS,
integer, intent(in)  NLOC,
integer, intent(in)  NGI,
integer, intent(in)  TOTELE,
integer, dimension( : ), intent(in)  NDGLNO,
integer, dimension( : ), intent(in)  FINDRM,
integer, dimension( : ), intent(in)  COLM,
integer, intent(in)  NCOLM,
integer, dimension( : ), intent(in)  X_NDGLN,
integer, intent(in)  X_NONODS,
integer, intent(in)  NDIM,
real, dimension(:,:), intent(in)  X_ALL,
real, dimension( :, : ), intent(in)  XC_CV_ALL,
real, dimension(:,:), intent(in)  N,
real, dimension(:,:,:), intent(in)  NLX_ALL,
real, dimension(:), intent(in)  WEIGHT,
logical, intent(in)  use_reflect 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ calc_limit_matrix_max_min()

subroutine isotropic_limiter_all::calc_limit_matrix_max_min ( real, dimension( :, : ), intent(inout)  TMAX_ALL,
real, dimension( :, : ), intent(inout)  TMIN_ALL,
real, dimension( :, : ), intent(inout)  DENMAX_ALL,
real, dimension( :, : ), intent(inout)  DENMIN_ALL,
real, dimension( :, : ), intent(inout)  T2MAX_ALL,
real, dimension( :, : ), intent(inout)  T2MIN_ALL,
real, dimension( :, : ), intent(in)  T_ALL,
real, dimension( :, :), intent(in)  T2_ALL,
real, dimension( :, : ), intent(in)  DEN_ALL,
integer, intent(in)  IGOT_T2,
integer, intent(in)  NPHASE,
integer, intent(in)  CV_NONODS,
integer, dimension( :, : ), intent(inout)  TMIN_NOD_ALL,
integer, dimension( :, : ), intent(inout)  TMAX_NOD_ALL,
integer, dimension( :, : ), intent(inout)  T2MIN_NOD_ALL,
integer, dimension( :, : ), intent(inout)  T2MAX_NOD_ALL,
integer, dimension( :, : ), intent(inout)  DENMIN_NOD_ALL,
integer, dimension( :, : ), intent(inout)  DENMAX_NOD_ALL,
integer, intent(in)  NSMALL_COLM,
integer, dimension( : ), intent(in)  SMALL_FINDRM,
integer, dimension( : ), intent(in)  SMALL_COLM,
real, dimension( :, : ), intent(inout)  TUPWIND_MAT_ALL,
real, dimension( :, : ), intent(inout)  DENUPWIND_MAT_ALL,
real, dimension( :, : ), intent(inout)  T2UPWIND_MAT_ALL,
real, dimension( : ), intent(in)  MASS_CV 
)

Populate limiting matrix based on max and min values For each node, find the largest and smallest value of T and DENSITY for both the current and previous timestep, out of the node value and all its surrounding nodes including Dirichlet b.c's.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ conv_quad_to_lin_tri_tet()

subroutine calc_anisotrop_lim::conv_quad_to_lin_tri_tet ( integer, dimension(sub_lin_totele*nloc_lin), intent(inout)  ndgln_p2top1,
integer, intent(in)  nloc_lin,
integer, intent(in)  cv_nloc,
integer, intent(in)  sub_lin_totele 
)

convert quadratic element into a series of linear elements...

Here is the caller graph for this function:

◆ dump_multiphase()

subroutine dump_multiphase ( character(len=*), intent(in)  prefix,
integer, optional  icp 
)

◆ face_theta_many()

subroutine cv_assemb::face_theta_many ( real, dimension(final_phase)  FTHETA,
logical, intent(in)  INTERFACE_TRACK,
real, dimension( final_phase ), intent(in)  T_NODJ_IPHA,
real, dimension( final_phase ), intent(in)  T_NODI_IPHA,
real, dimension( final_phase ), intent(in)  TOLD_NODJ_IPHA,
real, dimension( final_phase ), intent(in)  TOLD_NODI_IPHA 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ finptsstore()

subroutine calc_anisotrop_lim::finptsstore ( real, dimension(:,:), intent(in)  PSI_ALL,
real, dimension(:,:), intent(in)  FEMPSI_ALL,
logical, intent(in)  USE_FEMPSI,
integer, intent(in)  NFIELD,
integer, intent(in)  NONODS,
integer, intent(in)  NLOC,
integer, intent(in)  NGI,
integer, intent(in)  TOTELE,
integer, dimension(:), intent(in)  NDGLNO,
real, dimension(:,:), intent(inout)  MATPSI_ALL,
integer, dimension(:), intent(in)  FINDRM,
integer, dimension(:), intent(in)  COLM,
integer, intent(in)  NCOLM,
integer, intent(in)  NDIM,
integer, dimension(:), intent(in)  X_NDGLN,
integer, intent(in)  X_NONODS,
real, dimension(:,:), intent(in)  X_ALL,
real, dimension( :, : ), intent(in)  XC_CV_ALL,
real, dimension(:,:), intent(in)  N,
real, dimension(:, :,:), intent(in)  NLX_ALL,
real, dimension(:), intent(in)  WEIGHT,
integer, dimension(:), intent(in)  FINDELE,
integer, dimension(:), intent(in)  COLELE,
integer, intent(in)  NCOLEL,
integer, dimension(:), intent(inout)  ELEMATPSI,
real, dimension(:), intent(inout)  ELEMATWEI,
integer, intent(in)  IGETSTOR,
logical  BOUND,
logical  REFLECT 
)

This sub finds the matrix values MATPSI for a given point on the stencil IF IGETSTOR=1 then get ELEMATPSI,ELEMATWEI.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_diff_coef_divdx()

real function generate_laplacian_system::get_diff_coef_divdx ( integer, intent(in)  intface_type,
real, intent(in)  HDC,
real, intent(in)  W_i,
real, intent(in)  W_j,
real, intent(in)  Value_i,
real, intent(in)  Value_j,
real, intent(in), optional  sigma_i,
real, intent(in), optional  sigma_j 
)

: Computes the effective value of K or sigma. at the interface between CVs Based on the intface_type integer: 0 = no interpolation; 1 Harmonic mean; !20 for SelfPotential solver, harmonic mean considering charge; negative normal mean

Here is the caller graph for this function:

◆ get_int_t_den_new()

subroutine cv_assemb::get_int_t_den_new ( real, dimension ( nfield), intent(inout)  LIMF)

Computes the flux between CVs.

Author
Chris Pain, Pablo Salinas
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_int_vel_orig_new()

subroutine cv_assemb::get_int_vel_orig_new ( real, dimension( : ), intent(inout)  NDOTQNEW,
real, dimension( : ), intent(inout)  NDOTQ,
real, dimension( : ), intent(inout)  INCOME,
real, dimension( : ), intent(in)  LOC_T_I,
real, dimension( : ), intent(in)  LOC_T_J,
real, dimension( : ), intent(in)  LOC_DEN_I,
real, dimension( : ), intent(in)  LOC_DEN_J,
real, dimension( :, :, : ), intent(in)  LOC_NU,
real, dimension( :, :, : ), intent(in)  LOC2_NU,
real, dimension( :, : ), intent(inout)  NUGI_ALL,
real, dimension( :, :, : ), intent(inout)  UGI_COEF_ELE_ALL,
real, dimension( :, :, : ), intent(inout)  UGI_COEF_ELE2_ALL,
logical, intent(in)  not_OLD_VEL 
)

Computes the flux between CVs.

Author
Chris Pain, Pablo Salinas, Lluis Via-Estrem, Asiri Obeysekara
Here is the caller graph for this function:

◆ get_int_vel_porous_vel() [1/2]

subroutine cv_assemb::get_int_vel_porous_vel ( real, dimension( : ), intent(inout)  NDOTQNEW,
real, dimension( : ), intent(inout)  NDOTQ,
real, dimension( : ), intent(inout)  INCOME,
real, dimension( : ), intent(in)  LOC_T_I,
real, dimension( : ), intent(in)  LOC_T_J,
real, dimension( :, : ), intent(in)  LOC_FEMT,
real, dimension( :, :, : ), intent(in)  LOC_NU,
real, dimension( :, :, : ), intent(in)  LOC2_NU,
real, dimension( :, :, : ), intent(in)  SLOC_NU,
real, dimension( :, :, : ), intent(inout)  UGI_COEF_ELE_ALL,
real, dimension( :, :, : ), intent(inout)  UGI_COEF_ELE2_ALL,
real, dimension( : ), intent(in)  I_adv_coef,
real, dimension( : ), intent(in)  I_adv_coef_grad,
real, dimension( : ), intent(in)  J_adv_coef,
real, dimension( : ), intent(in)  J_adv_coef_grad,
real, dimension( : ), intent(in)  I_inv_adv_coef,
real, dimension( : ), intent(in)  J_inv_adv_coef,
real, dimension( :, : ), intent(inout)  UDGI_ALL,
real, intent(in)  MASS_CV_I,
real, intent(in)  MASS_CV_J,
real, dimension( : ), intent(in)  TUPWIND_IN,
real, dimension( : ), intent(in)  TUPWIND_OUT,
logical, intent(in)  not_OLD_VEL 
)

Computes the flux between CVs for porous media. NDOTQNEW contains the fluxes for a given gauss integration point.

Author
Chris Pain, Pablo Salinas
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_int_vel_porous_vel() [2/2]

subroutine saturation_assemb::get_int_vel_porous_vel ( real, dimension( : ), intent(inout)  NDOTQNEW,
real, dimension( : ), intent(inout)  NDOTQ,
real, dimension( : ), intent(inout)  INCOME,
real, dimension( : ), intent(in)  LOC_T_I,
real, dimension( : ), intent(in)  LOC_T_J,
real, dimension( :, :, : ), intent(in)  LOC_NU,
real, dimension( :, :, : ), intent(in)  SLOC_NU,
real, dimension( :, :, : ), intent(inout)  UGI_COEF_ELE_ALL,
real, dimension( : ), intent(in)  I_inv_adv_coef,
real, dimension( : ), intent(in)  J_inv_adv_coef,
real, dimension( :, : ), intent(inout)  UDGI_ALL,
real, intent(in)  MASS_CV_I,
real, intent(in)  MASS_CV_J 
)

Computes the flux between CVs for porous media. NDOTQNEW contains the fluxes for a given gauss integration point.

Author
Chris Pain, Pablo Salinas

◆ get_neigbouring_lists() [1/2]

subroutine saturation_assemb::get_neigbouring_lists ( integer, dimension(:), intent(inout)  JCOUNT_KLOC,
integer, dimension(:), intent(inout)  ICOUNT_KLOC,
integer, dimension(:), intent(inout)  C_JCOUNT_KLOC,
integer, dimension(:), intent(inout)  C_ICOUNT_KLOC 
)

◆ get_neigbouring_lists() [2/2]

subroutine cv_assemb::get_neigbouring_lists ( integer, dimension(:), intent(inout)  JCOUNT_KLOC,
integer, dimension(:), intent(inout)  ICOUNT_KLOC,
integer, dimension(:), intent(inout)  JCOUNT_KLOC2,
integer, dimension(:), intent(inout)  ICOUNT_KLOC2,
integer, dimension(:), intent(inout)  C_JCOUNT_KLOC,
integer, dimension(:), intent(inout)  C_ICOUNT_KLOC,
integer, dimension(:), intent(inout)  C_JCOUNT_KLOC2,
integer, dimension(:), intent(inout)  C_ICOUNT_KLOC2 
)
Here is the caller graph for this function:

◆ getstoreelewei()

subroutine calc_anisotrop_lim::getstoreelewei ( real, dimension(:,:), intent(in)  PSI_ALL,
integer, intent(in)  NFIELD,
integer, intent(in)  NONODS,
integer, intent(in)  NLOC,
integer, intent(in)  TOTELE,
integer, dimension(totele*nloc), intent(in)  NDGLNO,
real, dimension(:,:), intent(inout)  MATPSI_ALL,
integer, dimension(:), intent(in)  FINDRM,
integer, dimension(:), intent(in)  COLM,
integer, intent(in)  NCOLM,
logical  BOUND,
integer, dimension(:), intent(in)  ELEMATPSI,
real, dimension(ncolm*nloc), intent(in)  ELEMATWEI 
)

use the stored interpolation coeffs to caclulate MATPSI. This sub finds the matrix values MATPSI for a given point on the stencil

Here is the call graph for this function:
Here is the caller graph for this function:

◆ has_anisotropic_diffusion()

logical function cv_assemb::has_anisotropic_diffusion ( type(tensor_field), intent(in)  tracer)
Here is the caller graph for this function:

◆ i_pack_loc()

subroutine pack_loc_all3::i_pack_loc ( integer, dimension(:), intent(inout)  LOC_F,
integer, dimension(nphase), intent(in)  T_ALL,
integer, intent(in)  NPHASE,
integer, intent(inout)  IPT,
logical, dimension(nphase), intent(in)  IGOT_T_PACK 
)

If PACK then pack T_ALL into LOC_F as long at IGOT_T==1 and STORE and not already in storage.

Here is the caller graph for this function:

◆ introduce_c_cv_boundary_conditions()

subroutine put_in_ct_rhs::introduce_c_cv_boundary_conditions ( real, dimension(:,:,:), intent(out)  Bound_ele_correct)

This subroutine populates Bound_ele_correct and Bound_ele2_correct to properly apply the BCs when creating the MmatC_CV matrix.

Here is the caller graph for this function:

◆ mass_conservation_check_and_outfluxes()

subroutine cv_assemb::mass_conservation_check_and_outfluxes ( real, dimension(:,:), intent(inout)  calculate_mass_delta,
type (multi_outfluxes), intent(inout)  outfluxes,
real, dimension( :, : ), intent(in)  DEN_ALL,
integer, intent(in)  flag 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ matptsstore()

subroutine calc_anisotrop_lim::matptsstore ( real, dimension(:,:), intent(inout)  MATPSI_ALL,
integer, intent(in)  COUNT,
integer, intent(in)  NFIELD,
integer, intent(in)  NOD,
integer, intent(in)  XNOD,
real, dimension(:,:), intent(in)  PSI_ALL,
real, dimension(:,:), intent(in)  FEMPSI_ALL,
logical, intent(in)  USE_FEMPSI,
integer, intent(in)  NONODS,
integer, intent(in)  X_NONODS,
integer, intent(in)  NLOC,
integer, intent(in)  TOTELE,
integer, dimension(nloc*totele), intent(in)  X_NDGLN,
integer, dimension(nloc*totele), intent(in)  NDGLNO,
real, dimension(:)  X1_ALL,
real, dimension(:)  X2_ALL,
real, dimension(:)  NORMX1_ALL,
real, dimension(:,:), intent(in)  X_ALL,
integer, dimension(x_nonods+1), intent(in)  FINDELE,
integer, dimension(ncolel), intent(in)  COLELE,
integer, intent(in)  NCOLEL,
real, dimension(:, :), intent(in)  MINPSI,
real, dimension(:, :), intent(in)  MAXPSI,
integer, intent(inout)  ELEWIC,
real, dimension(nloc), intent(inout)  LOCCORDSK,
logical, intent(in)  BOUND,
logical, intent(in)  REFLECT,
integer, intent(in)  NDIM 
)

This sub calculates the value of PSI that would be at the other side of the stencil if we had a linear variation and within a single element. IF BOUND then make locally bounded.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ minmaxelewic()

subroutine calc_anisotrop_lim::minmaxelewic ( real, dimension(:,:), intent(in)  PSI_ALL,
integer, intent(in)  NONODS,
integer, intent(in)  NLOC,
integer, intent(in)  TOTELE,
integer, dimension(totele*nloc), intent(in)  NDGLNO,
integer, dimension(nonods+1), intent(in)  FINDRM,
integer, dimension(ncolm), intent(in)  COLM,
integer, intent(in)  NCOLM,
real, dimension(:,:), intent(inout)  MINPSI,
real, dimension(:,:), intent(inout)  MAXPSI 
)

This sub calculates the max and min values of PSI in local vacinity of an element.

Here is the caller graph for this function:

◆ philnodele()

subroutine calc_anisotrop_lim::philnodele ( integer, intent(in)  NONODS,
integer, dimension( : ), intent(inout)  FINDELE,
integer, dimension( : ), intent(inout)  COLELE,
integer, intent(inout)  NCOLEL,
integer, intent(in)  MXNCOLEL,
integer, intent(in)  TOTELE,
integer, intent(in)  NLOC,
integer, dimension( : ), intent(in)  NDGLNO,
integer, dimension( : ), intent(inout)  NLIST,
integer, dimension( : ), intent(inout)  INLIST 
)

This sub calculates the node to element list FINDELE,COLELE.

Note NLIST and INLIST are only used locally but are passed down from parent routine where they are dynamically allocated.

INPUTS:

NDGLNO - List of global node numbers

OUTPUTS:

COLELE - This is a list of the element numbers that each node belongs to. So it lists all elements for node 1, then all elements for node 2, and so on... FINDELE - is the pointer to the place in COLELE that gives the first element associated with a given global node

Called from subroutines IFINPTS and FINPTS, which are subroutines of CONSTRUCT_ADVECTION_DIFFUSION_CV

Here is the caller graph for this function:

◆ surro_cv_minmax()

subroutine isotropic_limiter_all::surro_cv_minmax ( real, dimension( :, : ), intent(inout)  TMAX_ALL,
real, dimension( :, : ), intent(inout)  TMIN_ALL,
real, dimension( :, : ), intent(inout)  TOLDMAX_ALL,
real, dimension( :, : ), intent(inout)  TOLDMIN_ALL,
real, dimension( :, : ), intent(inout)  DENMAX_ALL,
real, dimension( :, : ), intent(inout)  DENMIN_ALL,
real, dimension( :, : ), intent(inout)  DENOLDMAX_ALL,
real, dimension( :, : ), intent(inout)  DENOLDMIN_ALL,
real, dimension( :, : ), intent(inout)  T2MAX_ALL,
real, dimension( :, : ), intent(inout)  T2MIN_ALL,
real, dimension( :, : ), intent(inout)  T2OLDMAX_ALL,
real, dimension( :, : ), intent(inout)  T2OLDMIN_ALL,
real, dimension( :, : ), intent(in)  T_ALL,
real, dimension( :, : ), intent(in)  TOLD_ALL,
real, dimension( :, : ), intent(in)  T2_ALL,
real, dimension( :, : ), intent(in)  T2OLD_ALL,
real, dimension( :, : ), intent(in)  DEN_ALL,
real, dimension( :, : ), intent(in)  DENOLD_ALL,
integer, intent(in)  IGOT_T2,
integer, intent(in)  NPHASE,
integer, intent(in)  CV_NONODS,
integer, dimension( : ), intent(in)  FINACV,
integer, dimension( : ), intent(in), target  COLACV,
integer, intent(in)  STOTEL,
integer, intent(in)  CV_SNLOC,
integer, dimension( : ), intent(in)  CV_SNDGLN,
real, dimension( :, :, : ), intent(in)  SUF_T_BC_ALL,
real, dimension( :, :, : ), intent(in), pointer  SUF_T2_BC_ALL,
real, dimension( :, :, : ), intent(in)  SUF_D_BC_ALL,
integer, dimension( : , : , : ), intent(in)  WIC_T_BC_ALL,
integer, dimension( : , : , : ), intent(in)  WIC_T2_BC_ALL,
integer, dimension( : , : , : ), intent(in)  WIC_D_BC_ALL,
integer, dimension( :, : ), intent(inout)  TMIN_NOD_ALL,
integer, dimension( :, : ), intent(inout)  TMAX_NOD_ALL,
integer, dimension( :, : ), intent(inout)  TOLDMIN_NOD_ALL,
integer, dimension( :, : ), intent(inout)  TOLDMAX_NOD_ALL,
integer, dimension( :, : ), intent(inout)  T2MIN_NOD_ALL,
integer, dimension( :, : ), intent(inout)  T2MAX_NOD_ALL,
integer, dimension( :, : ), intent(inout)  T2OLDMIN_NOD_ALL,
integer, dimension( :, : ), intent(inout)  T2OLDMAX_NOD_ALL,
integer, dimension( :, : ), intent(inout)  DENMIN_NOD_ALL,
integer, dimension( :, : ), intent(inout)  DENMAX_NOD_ALL,
integer, dimension( :, : ), intent(inout)  DENOLDMIN_NOD_ALL,
integer, dimension( :, : ), intent(inout)  DENOLDMAX_NOD_ALL 
)

For each node, find the largest and smallest value of T and DENSITY for both the current and previous timestep, out of the node value and all its surrounding nodes including Dirichlet b.c's.

Here is the caller graph for this function:

◆ tri_tet_loccords()

subroutine tri_tet_loccords ( real, dimension(ndim), intent(in)  Xpt,
real, dimension(ndim+1), intent(inout)  LOCCORDS,
real, dimension(ndim,cv_nloc), intent(in)  X_CORNERS_ALL,
integer, intent(in)  NDIM,
integer, intent(in)  CV_NLOC 
)
Here is the call graph for this function:
Here is the caller graph for this function: