| 1 |
C $Header: /u/gcmpack/MITgcm/model/inc/CG3D.h,v 1.10 2010/03/16 00:04:00 jmc Exp $ |
| 2 |
C $Name: $ |
| 3 |
|
| 4 |
#ifdef ALLOW_NONHYDROSTATIC |
| 5 |
CBOP |
| 6 |
C !ROUTINE: CG3D.h |
| 7 |
C !INTERFACE: |
| 8 |
C include "CG3D.h" |
| 9 |
C !DESCRIPTION: \bv |
| 10 |
C *==========================================================* |
| 11 |
C | CG3D.h |
| 12 |
C | o Three-dimensional conjugate gradient solver header. |
| 13 |
C *==========================================================* |
| 14 |
C | The common blocks set up here are used in the elliptic |
| 15 |
C | equation inversion. They are also used as the interface |
| 16 |
C | to the rest of the model. To set the source term for the |
| 17 |
C | solver set the appropriate array below. To read the |
| 18 |
C | solution read from the appropriate array below. |
| 19 |
C *==========================================================* |
| 20 |
C \ev |
| 21 |
CEOP |
| 22 |
|
| 23 |
C-- COMMON /CG3D_R/ DEL**2 Laplacian operators |
| 24 |
C aW3d :: East-west operator. |
| 25 |
C aS3d :: North-south operator. |
| 26 |
C aV3d :: Vertical operator. |
| 27 |
C aC3d :: 3D operator main diagonal term. |
| 28 |
C zMC, zML, zMU :: preconditioner 3D solver |
| 29 |
C cg3dNorm - A matrix normalisation factor. |
| 30 |
|
| 31 |
#ifdef ALLOW_PETSC |
| 32 |
INTEGER MAX_CG3D_PETSC_CPUINVERT |
| 33 |
parameter ( MAX_CG3D_PETSC_CPUINVERT = 1 ) |
| 34 |
#endif |
| 35 |
|
| 36 |
COMMON /CG3D_R/ |
| 37 |
& aW3d, aS3d, aV3d, |
| 38 |
& aC3d, |
| 39 |
& zMC, zML, zMU, |
| 40 |
& cg3dNorm |
| 41 |
_RS aW3d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
| 42 |
_RS aS3d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
| 43 |
_RS aV3d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
| 44 |
_RS aC3d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
| 45 |
_RS zMC (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
| 46 |
_RS zML (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
| 47 |
_RS zMU (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
| 48 |
_RL cg3dNorm |
| 49 |
|
| 50 |
C-- COMMON /CG3D_WK_R/ Work array common block |
| 51 |
C cg3d_q - Intermediate matrix-vector product term |
| 52 |
C cg3d_r - idem |
| 53 |
C cg3d_s - idem |
| 54 |
COMMON /CG3D_WK_R/ |
| 55 |
& cg3d_q, cg3d_r, cg3d_s |
| 56 |
_RL cg3d_q(1-1 :sNx+1 ,1-1 :sNy+1 ,Nr,nSx,nSy) |
| 57 |
_RL cg3d_r(1-1 :sNx+1 ,1-1 :sNy+1 ,Nr,nSx,nSy) |
| 58 |
_RL cg3d_s(1-1 :sNx+1 ,1-1 :sNy+1 ,Nr,nSx,nSy) |
| 59 |
|
| 60 |
#ifdef ALLOW_PETSC |
| 61 |
COMMON /CG3D_PETSC_DOFS_RS/ |
| 62 |
& cg3d_petsc_dofs, cg3d_petsc_color |
| 63 |
_RS cg3d_petsc_dofs |
| 64 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
| 65 |
_RS cg3d_petsc_color |
| 66 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
| 67 |
|
| 68 |
COMMON /CG3D_PETSC_DOFS_I/ |
| 69 |
& cg3d_dofs_process, cg3d_color_rank |
| 70 |
INTEGER cg3d_dofs_process (0:nPx*nPy*MAX_CG3D_PETSC_CPUINVERT-1) |
| 71 |
INTEGER cg3d_color_rank ( MAX_CG3D_PETSC_CPUINVERT ) |
| 72 |
|
| 73 |
#endif |
| 74 |
|
| 75 |
|
| 76 |
#endif /* ALLOW_NONHYDROSTATIC */ |