xref: /phasta/svLS/svLS_STRUCT.h (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
1*1e99f302SBen Matthews !     This software is Copyright (c) 2012-2015 The Regents of the
2*1e99f302SBen Matthews !     University of California. All Rights Reserved.
3*1e99f302SBen Matthews !
4*1e99f302SBen Matthews !
5*1e99f302SBen Matthews !     Permission to copy and modify this software and its documentation
6*1e99f302SBen Matthews !     for educational, research and non-profit purposes, without fee,
7*1e99f302SBen Matthews !     and without a written agreement is hereby granted, provided that
8*1e99f302SBen Matthews !     the above copyright notice, this paragraph and the following three
9*1e99f302SBen Matthews !     paragraphs appear in all copies.
10*1e99f302SBen Matthews !
11*1e99f302SBen Matthews !     Permission to make commercial use of this software may be obtained
12*1e99f302SBen Matthews !     by contacting:
13*1e99f302SBen Matthews !     Technology Transfer Office
14*1e99f302SBen Matthews !     9500 Gilman Drive, Mail Code 0910
15*1e99f302SBen Matthews !     University of California
16*1e99f302SBen Matthews !     La Jolla, CA 92093-0910
17*1e99f302SBen Matthews !     (858) 534-5815
18*1e99f302SBen Matthews !     invent@ucsd.edu
19*1e99f302SBen Matthews !
20*1e99f302SBen Matthews !     This software program and documentation are copyrighted by The
21*1e99f302SBen Matthews !     Regents of the University of California. The software program and
22*1e99f302SBen Matthews !     documentation are supplied "as is", without any accompanying
23*1e99f302SBen Matthews !     services from The Regents. The Regents does not warrant that the
24*1e99f302SBen Matthews !     operation of the program will be uninterrupted or error-free. The
25*1e99f302SBen Matthews !     end-user understands that the program was developed for research
26*1e99f302SBen Matthews !     purposes and is advised not to rely exclusively on the program for
27*1e99f302SBen Matthews !     any reason.
28*1e99f302SBen Matthews !
29*1e99f302SBen Matthews !     IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
30*1e99f302SBen Matthews !     PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
31*1e99f302SBen Matthews !     DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
32*1e99f302SBen Matthews !     SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
33*1e99f302SBen Matthews !     CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34*1e99f302SBen Matthews !     THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
35*1e99f302SBen Matthews !     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
36*1e99f302SBen Matthews !     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
37*1e99f302SBen Matthews !     SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
38*1e99f302SBen Matthews !     UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE
39*1e99f302SBen Matthews !     MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
40*1e99f302SBen Matthews 
41*1e99f302SBen Matthews !     Some defenitions
42*1e99f302SBen Matthews       INTEGER, PARAMETER :: LS_TYPE_CG=1, LS_TYPE_GMRES=2, LS_TYPE_NS=3
43*1e99f302SBen Matthews       INTEGER, PARAMETER :: BC_TYPE_Dir = 0, BC_TYPE_Neu = 1
44*1e99f302SBen Matthews       INTEGER, PARAMETER :: BCOP_TYPE_ADD = 0, BCOP_TYPE_PRE = 1
45*1e99f302SBen Matthews 
46*1e99f302SBen Matthews !     Communication structure
47*1e99f302SBen Matthews       TYPE svLS_commuType
48*1e99f302SBen Matthews          SEQUENCE
49*1e99f302SBen Matthews !        Free of created          (USE)
50*1e99f302SBen Matthews          LOGICAL :: foC = .FALSE.
51*1e99f302SBen Matthews !        If this the master       (USE)
52*1e99f302SBen Matthews          LOGICAL :: masF
53*1e99f302SBen Matthews !        Master ID                (USE)
54*1e99f302SBen Matthews          INTEGER :: master
55*1e99f302SBen Matthews !        ID of this proc.         (USE)
56*1e99f302SBen Matthews          INTEGER :: task
57*1e99f302SBen Matthews !        Task in FORTRAN indexing (USE)
58*1e99f302SBen Matthews          INTEGER :: tF
59*1e99f302SBen Matthews !        Total number of tasks    (USE)
60*1e99f302SBen Matthews          INTEGER :: nTasks
61*1e99f302SBen Matthews !        MPI communicator         (IN)
62*1e99f302SBen Matthews          INTEGER :: comm
63*1e99f302SBen Matthews       END TYPE svLS_commuType
64*1e99f302SBen Matthews 
65*1e99f302SBen Matthews !     LHS matrix related data
66*1e99f302SBen Matthews       TYPE svLS_faceType
67*1e99f302SBen Matthews          SEQUENCE
68*1e99f302SBen Matthews !        Free or created                (USE)
69*1e99f302SBen Matthews          LOGICAL :: foC = .FALSE.
70*1e99f302SBen Matthews !        Neu: P/Q coupling              (USE)
71*1e99f302SBen Matthews          LOGICAL coupledFlag
72*1e99f302SBen Matthews !        Neu: shared between proces     (USE)
73*1e99f302SBen Matthews          LOGICAL :: sharedFlag = .FALSE.
74*1e99f302SBen Matthews !        Included in the computations   (IN)
75*1e99f302SBen Matthews          LOGICAL incFlag
76*1e99f302SBen Matthews !        Number of nodes                (IN)
77*1e99f302SBen Matthews          INTEGER :: nNo = 0
78*1e99f302SBen Matthews !        Degrees of freedom for val     (IN)
79*1e99f302SBen Matthews          INTEGER :: dof
80*1e99f302SBen Matthews !        Dir/Neu                        (IN)
81*1e99f302SBen Matthews          INTEGER :: bGrp = BC_TYPE_Dir
82*1e99f302SBen Matthews !        Only for data alignment
83*1e99f302SBen Matthews          INTEGER :: reserved
84*1e99f302SBen Matthews !        Global node number             (IN)
85*1e99f302SBen Matthews          INTEGER, ALLOCATABLE :: glob(:)
86*1e99f302SBen Matthews !        ||Sai||**2D0                   (USE)
87*1e99f302SBen Matthews          REAL*8 nS
88*1e99f302SBen Matthews !        Neu: P = res*Q                 (IN)
89*1e99f302SBen Matthews          REAL*8 :: res = 0D0
90*1e99f302SBen Matthews !        nodal Sai for Neu              (IN)
91*1e99f302SBen Matthews          REAL*8, ALLOCATABLE :: val(:,:)
92*1e99f302SBen Matthews !        Neu W*Sai                      (TMP)
93*1e99f302SBen Matthews          REAL*8, ALLOCATABLE :: valM(:,:)
94*1e99f302SBen Matthews       END TYPE svLS_faceType
95*1e99f302SBen Matthews 
96*1e99f302SBen Matthews !     All following are in (USE)
97*1e99f302SBen Matthews       TYPE svLS_cSType
98*1e99f302SBen Matthews          SEQUENCE
99*1e99f302SBen Matthews !        Pointer to start of data for commu (only 2 proc shared points)
100*1e99f302SBen Matthews          INTEGER ptr
101*1e99f302SBen Matthews !        Number of data to be commu  (only 2 proc shared points)
102*1e99f302SBen Matthews          INTEGER n
103*1e99f302SBen Matthews !        Commu tag
104*1e99f302SBen Matthews          INTEGER tag
105*1e99f302SBen Matthews !        Commu req
106*1e99f302SBen Matthews          INTEGER req
107*1e99f302SBen Matthews !        Number of blocks for commu  (for 3 < proc shared points)
108*1e99f302SBen Matthews          INTEGER nBl
109*1e99f302SBen Matthews !        Only for data alignment
110*1e99f302SBen Matthews          INTEGER reserved
111*1e99f302SBen Matthews !        Pointer to beggining of each block (for 3 < proc shared points)
112*1e99f302SBen Matthews          INTEGER, ALLOCATABLE :: blPtr(:)
113*1e99f302SBen Matthews !        Length of each block (for 3 < proc shared points)
114*1e99f302SBen Matthews          INTEGER, ALLOCATABLE :: blN(:)
115*1e99f302SBen Matthews       END TYPE svLS_cSType
116*1e99f302SBen Matthews 
117*1e99f302SBen Matthews       TYPE svLS_lhsType
118*1e99f302SBen Matthews          SEQUENCE
119*1e99f302SBen Matthews !        Free of created                     (USE)
120*1e99f302SBen Matthews          LOGICAL :: foC = .FALSE.
121*1e99f302SBen Matthews !        Global number of nodes              (IN)
122*1e99f302SBen Matthews          INTEGER :: gnNo = 0
123*1e99f302SBen Matthews !        Number of nodes                     (IN)
124*1e99f302SBen Matthews          INTEGER :: nNo = 0
125*1e99f302SBen Matthews !        Number of non-zero in lhs           (IN)
126*1e99f302SBen Matthews          INTEGER :: nnz = 0
127*1e99f302SBen Matthews !        Number of faces                     (IN)
128*1e99f302SBen Matthews          INTEGER :: nFaces = 0
129*1e99f302SBen Matthews !        nNo of this proc                    (USE)
130*1e99f302SBen Matthews          INTEGER :: mynNo
131*1e99f302SBen Matthews !        Column pointer                      (USE)
132*1e99f302SBen Matthews          INTEGER, ALLOCATABLE :: colPtr(:)
133*1e99f302SBen Matthews !        Row pointer                         (USE)
134*1e99f302SBen Matthews          INTEGER, ALLOCATABLE :: rowPtr(:,:)
135*1e99f302SBen Matthews !        Diagonal pointer                    (USE)
136*1e99f302SBen Matthews          INTEGER, ALLOCATABLE :: diagPtr(:)
137*1e99f302SBen Matthews !        Mapping of nodes                    (USE)
138*1e99f302SBen Matthews          INTEGER, ALLOCATABLE :: map(:)
139*1e99f302SBen Matthews          TYPE(svLS_commuType) commu
140*1e99f302SBen Matthews          TYPE(svLS_cSType), ALLOCATABLE :: cS(:)
141*1e99f302SBen Matthews          TYPE(svLS_faceType), ALLOCATABLE :: face(:)
142*1e99f302SBen Matthews       END TYPE svLS_lhsType
143*1e99f302SBen Matthews 
144*1e99f302SBen Matthews !     LS related structures
145*1e99f302SBen Matthews       TYPE svLS_subLsType
146*1e99f302SBen Matthews          SEQUENCE
147*1e99f302SBen Matthews !        Successful solving            (OUT)
148*1e99f302SBen Matthews          LOGICAL suc
149*1e99f302SBen Matthews !        Maximum iteration             (IN)
150*1e99f302SBen Matthews          INTEGER mItr
151*1e99f302SBen Matthews !        Space dimension               (IN)
152*1e99f302SBen Matthews          INTEGER sD
153*1e99f302SBen Matthews !        Number of iteration           (OUT)
154*1e99f302SBen Matthews          INTEGER itr
155*1e99f302SBen Matthews !        Number of Ax multiply         (OUT)
156*1e99f302SBen Matthews          INTEGER cM
157*1e99f302SBen Matthews !        Number of |x| norms           (OUT)
158*1e99f302SBen Matthews          INTEGER cN
159*1e99f302SBen Matthews !        Number of <x.y> dot products  (OUT)
160*1e99f302SBen Matthews          INTEGER cD
161*1e99f302SBen Matthews !        Only for data alignment       (-)
162*1e99f302SBen Matthews          INTEGER reserve
163*1e99f302SBen Matthews !        Absolute tolerance            (IN)
164*1e99f302SBen Matthews          REAL*8 absTol
165*1e99f302SBen Matthews !        Relative tolerance            (IN)
166*1e99f302SBen Matthews          REAL*8 relTol
167*1e99f302SBen Matthews !        Initial norm of residual      (OUT)
168*1e99f302SBen Matthews          REAL*8 iNorm
169*1e99f302SBen Matthews !        Final norm of residual        (OUT)
170*1e99f302SBen Matthews          REAL*8 fNorm
171*1e99f302SBen Matthews !        Res. rduction in last itr.    (OUT)
172*1e99f302SBen Matthews          REAL*8 dB
173*1e99f302SBen Matthews !        Calling duration              (OUT)
174*1e99f302SBen Matthews          REAL*8 callD
175*1e99f302SBen Matthews       END TYPE svLS_subLsType
176*1e99f302SBen Matthews 
177*1e99f302SBen Matthews       TYPE svLS_lsType
178*1e99f302SBen Matthews          SEQUENCE
179*1e99f302SBen Matthews !        Free of created             (USE)
180*1e99f302SBen Matthews          LOGICAL :: foC = .FALSE.
181*1e99f302SBen Matthews !        Which one of LS             (IN)
182*1e99f302SBen Matthews          INTEGER LS_type
183*1e99f302SBen Matthews !        Contribution of mom. res.   (OUT)
184*1e99f302SBen Matthews          INTEGER Resm
185*1e99f302SBen Matthews !        Contribution of cont. res.  (OUT)
186*1e99f302SBen Matthews          INTEGER Resc
187*1e99f302SBen Matthews          TYPE(svLS_subLsType) GM
188*1e99f302SBen Matthews          TYPE(svLS_subLsType) CG
189*1e99f302SBen Matthews          TYPE(svLS_subLsType) RI
190*1e99f302SBen Matthews       END TYPE svLS_lsType
191