Hi, I need to solve the momentum eqns of my CFD code which uses the RK3 scheme.
I need to solve the x and y momentum eqns 3 times per time step. Hence, for each sub time step, I have 2 linear eqns for x and y, which I solve using PETSc. The off-diagonal elements of the matrix are different for each substep. But the off-diagonal elements for the same substep is the same for different time. ie Off-diagonal elements (total 4) of the matrix of substep 1 at t=1 is the same as that of substep 1 at t=2,3.... Similarly, off-diagonal elements of the matrix of substep 2 at t=1 is the same as that of substep 2 at t=2,3.... Moreover, the off-diagonal elements of the matrix of substep 1,2 and 3 differs by a fixed factor ie if not considering the diagonal elements, matrix A(substep 1) == k1*A(substep 2) = k2*A(substep 3), where k1, k2 are constants However, the diagonal elements of the matrix changes all the time, between substeps and between time steps. The RHS vector also changes all the time. I am not too sure what is the best way (most efficient, fastest) to solve these linear equations. Currently, I write in the matrix at each substep. I doubt this is the best. I am thinking of: 1. Instead of creating 2 matrices for x and y, I create 6, 2 for each substep. The off-diagonal elements are always the same. I only use MatDiagonalSet to change the diagonal elements for each matrix at different time steps or 2. I only create 2 matrices. At each substep, I multiply the matrices by a constant, so that off-diagonal elements at one substep is equal to that of another. Then I use MatDiagonalSet to do the same as above. Which is a better mtd? Or is there other better mtds? My main concern is to save time. Moreover, how often do I have to do call: call KSPCreate(MPI_COMM_WORLD,ksp_semi_x,ierr) call KSPGetPC(ksp_semi_x,pc_semi_x,ierr) ksptype=KSPBCGS call KSPSetType(ksp_semi_x,ksptype,ierr) call KSPSetFromOptions(ksp_semi_x,ierr) tol=1.e-5 call KSPSetTolerances(ksp_semi_x,tol,PETSC_DEFAULT_DOUBLE_PRECISION,PETSC_DEFAULT_DOUBLE_PRECISION,PETSC_DEFAULT_INTEGER,ierr) Thank you very much for the help! -- Yours sincerely, TAY wee-beng
