C $Header: /u/gcmpack/MITgcm/model/inc/CG2D.h,v 1.16 2009/11/23 16:13:57 mlosch Exp $ C $Name: $ CBOP C !ROUTINE: CG2D.h C !INTERFACE: C include "CG2D.h" C C !DESCRIPTION: C \bv C *==========================================================* C | CG2D.h C | o Two-dimensional conjugate gradient solver header. C *==========================================================* C | Internal (private) data structures. C *==========================================================* C \ev CEOP C-- COMMON /CG2D_I_L/ cg2dNormaliseRHS C cg2dNormaliseRHS :: flag set to TRUE if normalise RHS in the Solver COMMON /CG2D_I_L/ cg2dNormaliseRHS LOGICAL cg2dNormaliseRHS C-- COMMON /CG2D_R/ DEL**2 Laplacian operators C aW2d :: East-west operator. C aS2d :: North-south operator. C aC2d :: 2D operator main diagonal term. C pW :: East-west off-diagonal term of preconditioner. C pS :: North-south off-diagonal term of preconditioner. C pC :: Main diagonal term of preconditioner. C cg2dNorm :: A matrix normalisation factor. C cg2dTolerance :: cg2d solver Tolerance (solver unit = m2/s2 or no unit, C depending on cg2dNormaliseRHS) COMMON /CG2D_I_R/ & aW2d, aS2d, aC2d, & pW, pS, pC, & cg2dNorm, cg2dTolerance _RS aW2d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RS aS2d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RS aC2d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RS pW (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RS pS (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RS pC (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL cg2dNorm, cg2dTolerance C-- COMMON /CG2D_I_WK_R/ Work array common block C cg2d_q :: Intermediate matrix-vector product term C cg2d_r :: *same* C cg2d_s :: *same* COMMON /CG2D_I_WK_R/ & cg2d_q, cg2d_r, cg2d_s _RL cg2d_q(1-1:sNx+1,1-1:sNy+1,nSx,nSy) #ifdef ALLOW_CG2D_NSA _RL cg2d_r(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL cg2d_s(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) #else /* ALLOW_CG2D_NSA */ _RL cg2d_r(1-1:sNx+1,1-1:sNy+1,nSx,nSy) _RL cg2d_s(1-1:sNx+1,1-1:sNy+1,nSx,nSy) #endif /* ALLOW_CG2D_NSA */ #ifdef ALLOW_CG2D_NSA C-- COMMON /CG2D_I_WK_R2/ extra work array common block C cg2d_z :: Intermediate matrix-vector product term C :: reduces the number of recomputation in adjoint mode C :: this field is superfluous if your cg2d is self-adjoint. COMMON /CG2D_I_WK_R2/ cg2d_z _RL cg2d_z(1-1:sNx+1,1-1:sNy+1,nSx,nSy) #endif /* ALLOW_CG2D_NSA */ #ifdef ALLOW_SRCG C-- COMMON /CG2D_I_WK_R3/ Work array common block C cg2d_y :: residual scaled by preconditioner C cg2d_v :: z times the operator C cg2d_q :: Intermediate matrix-vector product term C cg2d_r :: *same* C cg2d_s :: *same* C sumPhi :: needed to call global_vec_sum_r8 when mutli-threaded COMMON /CG2D_I_WK_R3/ & cg2d_y,cg2d_v,sumPhi _RL cg2d_y(1-1:sNx+1,1-1:sNy+1,nSx,nSy) _RL cg2d_v(1-1:sNx+1,1-1:sNy+1,nSx,nSy) _RL sumPhi(3,nSx,nSy) #endif /* ALLOW_SRCG */