![]() |
ICFERST
25-11
Reservoir simulator based on DCVFEM, Dynamic Mesh optimisation and Surface-based modelling
|
This module contain subroutines to deal with the ICFERST matrices format. This includes MATVECS and MATMAT operations All of this should be replaced by PETSc. More...
Functions/Subroutines | |
| subroutine | matdmatinv (DMAT, DMATINV, NLOC) |
| calculate DMATINV More... | |
| subroutine | matinv (A, N, NMAX) |
| : This sub finds the inverse of the matrix A and puts it back in A. MAT, MAT2, X and B are working vectors. More... | |
| subroutine | matinvold (A, N, MAT, B) |
| : This sub finds the inverse of the matrix A and puts it back in A. MAT, MAT2, X and B are working vectors. More... | |
| subroutine | smlinngot (A, X, B, NMX, IPIV, GOTDEC) |
| Calculate the inverse using the LU decomposition L can be provided, speeding up the method to O(n) More... | |
| subroutine | color_get_cmc_pha (Mdims, Mspars, ndgln, Mmat, DIAG_SCALE_PRES, DIAG_SCALE_PRES_COUP, INV_B, CMC_petsc, CMC_PRECON, IGOT_CMC_PRECON, MASS_MN_PRES, pipes_aux, got_free_surf, MASS_SUF, FEM_continuity_equation) |
| :Initialize the momentum equation (CMC) and introduces the corresponding values in it. COLOR_GET_CMC_PHA_FAST is very memory hungry, so we let the user decide or if we are using a compacted lumped mass matrix then the memory reduction compensates this extra memory usage More... | |
| subroutine | mass_matrix_inversion (PIVIT_MAT, Mdims, eles_with_pipe) |
| : Inversion of the mass matrix. If compacted this is much more efficient More... | |
| subroutine | mass_matrix_matvec (U, BLOCK_MAT, CDP, NDIM, NPHASE, TOTELE, U_NLOC, U_NDGLN) |
| : U = Mass_matrix * Vector (tipically vector is Grad * P + RHS and this is used to obtain the velocity) More... | |
| subroutine | pha_block_mat_vec (U, BLOCK_MAT, CDP, U_NONODS, NDIM, NPHASE, TOTELE, U_NLOC, U_NDGLN) |
| : performs U = BLOCK_MAT * CDP, where block_mat More... | |
| subroutine | pha_block_mat_vec2 (U, BLOCK_MAT, CDP, NDIM, NPHASE, TOTELE, U_NLOC, U_NDGLN) |
| :U = BLOCK_MAT * CDP More... | |
| subroutine | pha_block_mat_vec_many2 (U, BLOCK_MAT, CDP, U_NONODS, NDIM, NPHASE, NBLOCK, TOTELE, U_NLOC, U_NDGLN) |
| : U = BLOCK_MAT * CDP More... | |
| subroutine | pha_block_mat_vec_many (U, BLOCK_MAT, CDP, NDIM, NPHASE, NBLOCK, TOTELE, U_NLOC, U_NDGLN) |
| : U = BLOCK_MAT * CDP More... | |
| subroutine | pha_block_mat_vec_many_reusing (BLOCK_MAT, CDP, NDIM, NPHASE, NBLOCK, TOTELE, U_NLOC, U_NDGLN) |
| : U = BLOCK_MAT * CDP The difference with PHA_BLOCK_MAT_VEC_MANY is that the input CDP is overwritten with the output More... | |
| subroutine | ct_mult (CV_RHS, U, V, W, CV_NONODS, U_NONODS, NDIM, NPHASE, CT, NCOLCT, FINDCT, COLCT) |
| : CV_RHS=CT*U More... | |
| subroutine | ct_mult2 (CV_RHS, U, CV_NONODS, U_NONODS, NDIM, NPHASE, CT, NCOLCT, FINDCT, COLCT) |
| :CV_RHS=CT*U More... | |
| subroutine | ct_mult_many (CV_RHS, U, CV_NONODS, U_NONODS, NDIM, NPHASE, NBLOCK, CT, NCOLCT, FINDCT, COLCT) |
| : CV_RHS = CT * U More... | |
| subroutine | c_mult_many (CDP, DP, CV_NONODS, U_NONODS, NDIM, NPHASE, NBLOCK, C, NCOLC, FINDC, COLC) |
| : CDP=C*DP More... | |
| subroutine | c_mult2 (CDP, DP, CV_NONODS, U_NONODS, NDIM, NPHASE, C, NCOLC, FINDC, COLC) |
| : CDP=C*DP More... | |
| subroutine | c_mult2_multi_pres (Mdims, Mspars, Mmat, deltap, CDP_tensor) |
| : Performs the multiplication CDP_tensor = MmatC * deltap More... | |
| subroutine | ct_mult_with_c (DP, U_LONG, U_NONODS, NDIM, NPHASE, C, NCOLC, FINDC, COLC) |
| : DP = (C)^T U_LONG More... | |
| subroutine | ct_mult_with_c3 (DP, U_ALL, U_NONODS, NDIM, NPHASE, C, NCOLC, FINDC, COLC) |
| : DP = (C)^T U_ALL More... | |
| subroutine | ct_mult_with_c_many (DP, U_LONG, U_NONODS, NDIM, NPHASE, C, FINDC, COLC) |
| : DP = (C)^T U_LONG More... | |
| subroutine | ulong_2_uvw (U, V, W, UP, U_NONODS, NDIM, NPHASE) |
| subroutine | posinmat (posmat, globi, globj, findrm, colm) |
| : Find position in matrix POSMAT which has column GLOBJ More... | |
| subroutine | assemble_global_multiphase_csr (global_csr, block_csr, dense_block_matrix, block_to_global, global_dense_block) |
| subroutine | allocate_global_multiphase_petsc_csr (global_petsc, sparsity, tracer, nphase) |
| type(petsc_csr_matrix) function | allocate_momentum_matrix (sparsity, velocity) |
This module contain subroutines to deal with the ICFERST matrices format. This includes MATVECS and MATMAT operations All of this should be replaced by PETSc.
| subroutine matrix_operations::allocate_global_multiphase_petsc_csr | ( | type(petsc_csr_matrix) | global_petsc, |
| type(csr_sparsity) | sparsity, | ||
| type(tensor_field) | tracer, | ||
| integer, intent(in) | nphase | ||
| ) |

| type(petsc_csr_matrix) function matrix_operations::allocate_momentum_matrix | ( | type(csr_sparsity), intent(inout) | sparsity, |
| type(tensor_field), intent(inout) | velocity | ||
| ) |

| subroutine matrix_operations::assemble_global_multiphase_csr | ( | real, dimension(:), intent(out) | global_csr, |
| real, dimension(:), intent(in) | block_csr, | ||
| real, dimension(:,:,:), intent(in) | dense_block_matrix, | ||
| integer, dimension(:), intent(in) | block_to_global, | ||
| integer, dimension(:,:), intent(in) | global_dense_block | ||
| ) |
| subroutine matrix_operations::c_mult2 | ( | real, dimension( ndim, nphase, u_nonods ), intent(inout) | CDP, |
| real, dimension( cv_nonods ), intent(in) | DP, | ||
| integer, intent(in) | CV_NONODS, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| real, dimension( ndim, nphase, ncolc ), intent(in) | C, | ||
| integer, intent(in) | NCOLC, | ||
| integer, dimension( u_nonods + 1 ), intent(in) | FINDC, | ||
| integer, dimension( ncolc ), intent(in) | COLC | ||
| ) |
: CDP=C*DP

| subroutine matrix_operations::c_mult2_multi_pres | ( | type(multi_dimensions), intent(in) | Mdims, |
| type (multi_sparsities), intent(in) | Mspars, | ||
| type (multi_matrices), intent(in) | Mmat, | ||
| real, dimension(mdims%npres,mdims%cv_nonods), intent(in) | deltap, | ||
| type(tensor_field), intent(inout) | CDP_tensor | ||
| ) |
: Performs the multiplication CDP_tensor = MmatC * deltap


| subroutine matrix_operations::c_mult_many | ( | real, dimension( :, :, :, : ), intent(inout) | CDP, |
| real, dimension( :, : ), intent(in) | DP, | ||
| integer, intent(in) | CV_NONODS, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| integer, intent(in) | NBLOCK, | ||
| real, dimension( :, :, : ), intent(in) | C, | ||
| integer, intent(in) | NCOLC, | ||
| integer, dimension( : ), intent(in) | FINDC, | ||
| integer, dimension( : ), intent(in) | COLC | ||
| ) |
: CDP=C*DP

| subroutine matrix_operations::color_get_cmc_pha | ( | type(multi_dimensions), intent(in) | Mdims, |
| type (multi_sparsities), intent(in) | Mspars, | ||
| type(multi_ndgln), intent(in) | ndgln, | ||
| type (multi_matrices), intent(inout) | Mmat, | ||
| real, dimension( :, : ), intent(in) | DIAG_SCALE_PRES, | ||
| real, dimension( :, :, : ), intent(in) | DIAG_SCALE_PRES_COUP, | ||
| real, dimension( :, :, : ), intent(in) | INV_B, | ||
| type(petsc_csr_matrix), intent(inout) | CMC_petsc, | ||
| real, dimension( :, :, : ), intent(inout) | CMC_PRECON, | ||
| integer, intent(in) | IGOT_CMC_PRECON, | ||
| real, dimension( : ), intent(in) | MASS_MN_PRES, | ||
| type (multi_pipe_package), intent(in) | pipes_aux, | ||
| logical, intent(in) | got_free_surf, | ||
| real, dimension( : ), intent(in) | MASS_SUF, | ||
| logical, intent(in) | FEM_continuity_equation | ||
| ) |
:Initialize the momentum equation (CMC) and introduces the corresponding values in it. COLOR_GET_CMC_PHA_FAST is very memory hungry, so we let the user decide or if we are using a compacted lumped mass matrix then the memory reduction compensates this extra memory usage


| subroutine matrix_operations::ct_mult | ( | real, dimension( cv_nonods ), intent(inout) | CV_RHS, |
| real, dimension( u_nonods * nphase ), intent(in) | U, | ||
| real, dimension( u_nonods * nphase ), intent(in) | V, | ||
| real, dimension( u_nonods * nphase ), intent(in) | W, | ||
| integer, intent(in) | CV_NONODS, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| real, dimension( ndim, nphase, ncolct ), intent(in) | CT, | ||
| integer, intent(in) | NCOLCT, | ||
| integer, dimension( cv_nonods + 1 ), intent(in) | FINDCT, | ||
| integer, dimension( ncolct ), intent(in) | COLCT | ||
| ) |
: CV_RHS=CT*U

| subroutine matrix_operations::ct_mult2 | ( | real, dimension( cv_nonods ), intent(inout) | CV_RHS, |
| real, dimension( ndim, nphase, u_nonods ), intent(in) | U, | ||
| integer, intent(in) | CV_NONODS, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| real, dimension( ndim, nphase, ncolct ), intent(in) | CT, | ||
| integer, intent(in) | NCOLCT, | ||
| integer, dimension( cv_nonods + 1 ), intent(in) | FINDCT, | ||
| integer, dimension( ncolct ), intent(in) | COLCT | ||
| ) |
:CV_RHS=CT*U

| subroutine matrix_operations::ct_mult_many | ( | real, dimension( nblock, cv_nonods ), intent(inout) | CV_RHS, |
| real, dimension( nblock, ndim, nphase, u_nonods ), intent(in) | U, | ||
| integer, intent(in) | CV_NONODS, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| integer, intent(in) | NBLOCK, | ||
| real, dimension( :, :, : ), intent(in) | CT, | ||
| integer, intent(in) | NCOLCT, | ||
| integer, dimension( : ), intent(in) | FINDCT, | ||
| integer, dimension( : ), intent(in) | COLCT | ||
| ) |
: CV_RHS = CT * U

| subroutine matrix_operations::ct_mult_with_c | ( | real, dimension( : ), intent(inout) | DP, |
| real, dimension( : ), intent(in) | U_LONG, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| real, dimension( :, :, : ), intent(in) | C, | ||
| integer, intent(in) | NCOLC, | ||
| integer, dimension( : ), intent(in) | FINDC, | ||
| integer, dimension( : ), intent(in) | COLC | ||
| ) |
: DP = (C)^T U_LONG

| subroutine matrix_operations::ct_mult_with_c3 | ( | real, dimension( : ), intent(inout) | DP, |
| real, dimension( :, :, : ), intent(in) | U_ALL, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| real, dimension( :, :, : ), intent(in) | C, | ||
| integer, intent(in) | NCOLC, | ||
| integer, dimension( : ), intent(in) | FINDC, | ||
| integer, dimension( : ), intent(in) | COLC | ||
| ) |
: DP = (C)^T U_ALL

| subroutine matrix_operations::ct_mult_with_c_many | ( | real, dimension( :, : ), intent(inout) | DP, |
| real, dimension( :, :, :, : ), intent(in) | U_LONG, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| real, dimension( :, :, : ), intent(in) | C, | ||
| integer, dimension( : ), intent(in) | FINDC, | ||
| integer, dimension( : ), intent(in) | COLC | ||
| ) |
: DP = (C)^T U_LONG

| subroutine matrix_operations::mass_matrix_inversion | ( | real, dimension( : , : , : ), intent(inout), contiguous | PIVIT_MAT, |
| type(multi_dimensions), intent(in) | Mdims, | ||
| type(pipe_coords), dimension(:), intent(in) | eles_with_pipe | ||
| ) |
: Inversion of the mass matrix. If compacted this is much more efficient


| subroutine matrix_operations::mass_matrix_matvec | ( | real, dimension( ndim * nphase * u_nloc * totele ), intent(inout) | U, |
| real, dimension( :, :, : ), intent(in), target | BLOCK_MAT, | ||
| real, dimension( :, :, : ), intent(in) | CDP, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| integer, intent(in) | TOTELE, | ||
| integer, intent(in) | U_NLOC, | ||
| integer, dimension( : ), intent(in), target | U_NDGLN | ||
| ) |
: U = Mass_matrix * Vector (tipically vector is Grad * P + RHS and this is used to obtain the velocity)

| subroutine matrix_operations::matdmatinv | ( | real, dimension( :, : ), intent(in) | DMAT, |
| real, dimension( :, : ), intent(inout) | DMATINV, | ||
| integer, intent(in) | NLOC | ||
| ) |
calculate DMATINV


| subroutine matrix_operations::matinv | ( | real, dimension( :, : ), intent(inout) | A, |
| integer, intent(in) | N, | ||
| integer, intent(in) | NMAX | ||
| ) |
: This sub finds the inverse of the matrix A and puts it back in A. MAT, MAT2, X and B are working vectors.

| subroutine matrix_operations::matinvold | ( | real, dimension( :, : ), intent(inout) | A, |
| integer, intent(in) | N, | ||
| real, dimension( :, : ), intent(inout) | MAT, | ||
| real, dimension( : ), intent(inout) | B | ||
| ) |
: This sub finds the inverse of the matrix A and puts it back in A. MAT, MAT2, X and B are working vectors.


| subroutine matrix_operations::pha_block_mat_vec | ( | real, dimension( : ), intent(inout) | U, |
| real, dimension( :, :, : ), intent(in), target | BLOCK_MAT, | ||
| real, dimension( ndim, nphase, u_nonods ), intent(inout) | CDP, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| integer, intent(in) | TOTELE, | ||
| integer, intent(in) | U_NLOC, | ||
| integer, dimension( : ), intent(in), target | U_NDGLN | ||
| ) |
: performs U = BLOCK_MAT * CDP, where block_mat

| subroutine matrix_operations::pha_block_mat_vec2 | ( | real, dimension( :, :, : ), intent(inout) | U, |
| real, dimension( :, :, : ), intent(in), target | BLOCK_MAT, | ||
| real, dimension( :, :, : ), intent(in) | CDP, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| integer, intent(in) | TOTELE, | ||
| integer, intent(in) | U_NLOC, | ||
| integer, dimension( : ), intent(in), target | U_NDGLN | ||
| ) |
:U = BLOCK_MAT * CDP
| subroutine matrix_operations::pha_block_mat_vec_many | ( | real, dimension( :, :, :, : ), intent(inout), target, contiguous | U, |
| real, dimension( :, : , : ), intent(in), contiguous | BLOCK_MAT, | ||
| real, dimension( :, : , :, : ), intent(in), target, contiguous | CDP, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| integer, intent(in) | NBLOCK, | ||
| integer, intent(in) | TOTELE, | ||
| integer, intent(in) | U_NLOC, | ||
| integer, dimension( : ), intent(in) | U_NDGLN | ||
| ) |
: U = BLOCK_MAT * CDP
| subroutine matrix_operations::pha_block_mat_vec_many2 | ( | real, dimension( :, : ), intent(inout) | U, |
| real, dimension( :, :, : ), intent(in), target | BLOCK_MAT, | ||
| real, dimension( :, : ), intent(in) | CDP, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| integer, intent(in) | NBLOCK, | ||
| integer, intent(in) | TOTELE, | ||
| integer, intent(in) | U_NLOC, | ||
| integer, dimension( : ), intent(in), target | U_NDGLN | ||
| ) |
: U = BLOCK_MAT * CDP
| subroutine matrix_operations::pha_block_mat_vec_many_reusing | ( | real, dimension( :, : , : ), intent(in), contiguous | BLOCK_MAT, |
| real, dimension( :, : , :, : ), intent(inout), target, contiguous | CDP, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE, | ||
| integer, intent(in) | NBLOCK, | ||
| integer, intent(in) | TOTELE, | ||
| integer, intent(in) | U_NLOC, | ||
| integer, dimension( : ), intent(in) | U_NDGLN | ||
| ) |
: U = BLOCK_MAT * CDP The difference with PHA_BLOCK_MAT_VEC_MANY is that the input CDP is overwritten with the output

| subroutine matrix_operations::posinmat | ( | integer, intent(inout) | posmat, |
| integer, intent(in) | globi, | ||
| integer, intent(in) | globj, | ||
| integer, dimension( : ), intent(in) | findrm, | ||
| integer, dimension( : ), intent(in) | colm | ||
| ) |
: Find position in matrix POSMAT which has column GLOBJ

| subroutine matrix_operations::smlinngot | ( | real, dimension( :, : ), intent(inout) | A, |
| real, dimension( : ), intent(inout) | X, | ||
| real, dimension( : ), intent(in) | B, | ||
| integer | NMX, | ||
| integer, dimension(:), intent(inout) | IPIV, | ||
| logical, intent(in) | GOTDEC | ||
| ) |
Calculate the inverse using the LU decomposition L can be provided, speeding up the method to O(n)

| subroutine matrix_operations::ulong_2_uvw | ( | real, dimension( : ), intent(inout) | U, |
| real, dimension( : ), intent(inout) | V, | ||
| real, dimension( : ), intent(inout) | W, | ||
| real, dimension( : ), intent(in) | UP, | ||
| integer, intent(in) | U_NONODS, | ||
| integer, intent(in) | NDIM, | ||
| integer, intent(in) | NPHASE | ||
| ) |
