The TELEMAC-MASCARET system  trunk
pre4_mumps.F
Go to the documentation of this file.
1 ! *********************
2  SUBROUTINE pre4_mumps
3 ! *********************
4 !
5  &(npoin,nsegb,glosegb,dab1,dab2,dab3,dab4,xab1,xab2,xab3,xab4,
6  & xx1,xx2,cvb1,cvb2,typext1,typext2,typext3,typext4,
7  & knolg,npoin_tot)
8 !
9 !***********************************************************************
10 ! MUMPSVOID V7P1
11 !***********************************************************************
12 !
13 !brief CALLS THE DIRECT SOLVER MUMPS.
14 !+ IF MUMPS IS NOT INSTALLED : EMPTY SUBROUTINES ARE USED INSTEAD.
15 !
16 !history E. RAZAFINDRAKOTO (LNH)
17 !+ 20/11/2006
18 !+
19 !+
20 !
21 !history C. DENIS (SINETICS)
22 !+ 14/10/2009
23 !+ V5P9
24 !+
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 13/07/2010
28 !+ V6P0
29 !+ Translation of French comments within the FORTRAN sources into
30 !+ English comments
31 !
32 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
33 !+ 21/08/2010
34 !+ V6P0
35 !+ Creation of DOXYGEN tags for automated documentation and
36 !+ cross-referencing of the FORTRAN sources
37 !
38 !history J-M HERVOUET (EDF LAB, LNHE)
39 !+ 23/02/2015
40 !+ V7P1
41 !+ Arguments TYPEXT1,2,3,4 added, for calling SD_FABSG4
42 !
43 !history S.E.BOURBAN (HRW)
44 !+ 21/08/2015
45 !+ V7P1
46 !+ Final tweak to the arguments of SOLVE_MUMPS_PAR for linkage with
47 !+ MUMPS ... It now works !
48 !+ Although letting MUMPS recreate a new split of the mesh is not
49 !+ helpful at this stage.
50 !
51 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
52 !| CVB1,CVB2 |-->| SECONDS MEMBRES
53 !| DAB1 |---|
54 !| DAB2 |---|
55 !| DAB3 |---|
56 !| DAB4 |---|
57 !| GLOSEGB |---|
58 !| NPOIN |-->| NOMBRE D'INCONNUES
59 !| NSEGB |-->| NOMBRE DE SEGMENTS
60 !| TYPEXT |-->| TYPE OF EXTRA-DIAGONAL TERMS OF MATRICES
61 !| XAB1 |---|
62 !| XAB2 |---|
63 !| XAB3 |---|
64 !| XAB4 |---|
65 !| XX1,XX2 |<--| SOLUTIONS
66 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 !
69  & rhs_p4m,xinc_p4m,size_rhs_p4m,
70  & size_da_p4m,size_xa_p4m,
71  & size_xinc_p4m,size_gloseg4_p4m
72  USE bief
73 !
75  IMPLICIT NONE
76 !
77 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
78 !
79  INTEGER, INTENT(IN) :: NPOIN,NSEGB,NPOIN_TOT
80  INTEGER, INTENT(IN) :: GLOSEGB(nsegb*2),KNOLG(*)
81  DOUBLE PRECISION, INTENT(IN) :: DAB1(npoin),DAB2(npoin)
82  DOUBLE PRECISION, INTENT(IN) :: DAB3(npoin),DAB4(npoin)
83  DOUBLE PRECISION, INTENT(IN) :: XAB1(2*nsegb),XAB2(2*nsegb)
84  DOUBLE PRECISION, INTENT(IN) :: XAB3(2*nsegb),XAB4(2*nsegb)
85  DOUBLE PRECISION, INTENT(INOUT) :: XX1(npoin),XX2(npoin)
86  DOUBLE PRECISION, INTENT(IN) :: CVB1(npoin),CVB2(npoin)
87  CHARACTER(LEN=1), INTENT(IN) :: TYPEXT1,TYPEXT2
88  CHARACTER(LEN=1), INTENT(IN) :: TYPEXT3,TYPEXT4
89 !
90 #if defined HAVE_MUMPS
91  INTEGER NPBLK,NSEGBLK,I
92 !
93 !-----------------------------------------------------------------------
94 !
95  npblk=npoin*2
96  nsegblk=4*nsegb+npoin
97 !
98  IF(size_gloseg4_p4m.EQ.0) THEN
99  ALLOCATE(gloseg4_p4m(2*nsegblk))
100  size_gloseg4_p4m= 2*nsegblk
101  ELSEIF( 2*nsegblk.GT.size_gloseg4_p4m) THEN
102  DEALLOCATE(gloseg4_p4m)
103  ALLOCATE(gloseg4_p4m(2*nsegblk))
104  size_gloseg4_p4m= 2*nsegblk
105  ENDIF
106  IF(size_da_p4m.EQ.0) THEN
107  ALLOCATE(da_p4m(npblk))
108  size_da_p4m= npblk
109  ELSEIF( npblk.GT.size_da_p4m) THEN
110  DEALLOCATE(da_p4m)
111  ALLOCATE(da_p4m(npblk))
112  size_da_p4m= npblk
113  ENDIF
114  IF(size_xa_p4m.EQ.0) THEN
115  ALLOCATE(xa_p4m(2*nsegblk))
116  size_xa_p4m= 2*nsegblk
117  ELSEIF( 2*nsegblk.GT.size_xa_p4m) THEN
118  DEALLOCATE(xa_p4m)
119  ALLOCATE(xa_p4m(2*nsegblk))
120  size_xa_p4m= 2*nsegblk
121  ENDIF
122  IF(size_rhs_p4m.EQ.0) THEN
123  ALLOCATE(rhs_p4m(npblk))
124  size_rhs_p4m= npblk
125  ELSEIF( npblk.GT.size_rhs_p4m) THEN
126  DEALLOCATE(rhs_p4m)
127  ALLOCATE(rhs_p4m(npblk))
128  size_rhs_p4m= npblk
129  ENDIF
130  IF(size_xinc_p4m.EQ.0) THEN
131  ALLOCATE(xinc_p4m(npblk))
132  size_xinc_p4m= npblk
133  ELSEIF( npblk.GT.size_xinc_p4m) THEN
134  DEALLOCATE(xinc_p4m)
135  ALLOCATE(xinc_p4m(npblk))
136  size_xinc_p4m= npblk
137  ENDIF
138 !
139 !-----------------------------------------------------------------------
140 !
141 ! 1. SECOND MEMBRE DU SYSTEME
142 ! ===========================
143 !
144  DO i=1,npoin
145  rhs_p4m(i) = cvb1(i)
146  rhs_p4m(i+npoin)= cvb2(i)
147  ENDDO
148 !
149 ! 2. CONSTRUCTION STOCKAGE SEGMENT MATRICE BLOCK (DE 4)
150 ! =====================================================
151 !
152  CALL sd_strsg4(npoin,nsegb,glosegb,nsegblk,gloseg4_p4m)
153 !
154  CALL sd_fabsg4(npoin,nsegb,dab1,dab2,dab3,dab4,
155  & xab1,xab2,xab3,xab4,npblk,nsegblk,da_p4m,xa_p4m,
156  & typext1,typext2,typext3,typext4)
157 !
158 ! 3. RESOLUTION : APPEL A MUMPS
159 ! =============================
160 !
161 
162 !
163  CALL solve_mumps_par(npblk,nsegblk,gloseg4_p4m,nsegblk,da_p4m,
164  & xa_p4m,xinc_p4m,rhs_p4m,'Q',knolg,
165  & npoin_tot)
166 !
167 ! 4. RECUPERATION DES INCONNUES
168 ! =============================
169 !
170  DO i=1,npoin
171  xx1(i)= xinc_p4m(i)
172  xx2(i)= xinc_p4m(i+npoin)
173  ENDDO
174 !
175 #else
176  WRITE(lu,2019)
177 2019 FORMAT(1x,'MUMPS NOT INSTALLED IN THIS SYSTEM',/,1x,
178  & 'CHOOSE OTHER METHOD ',///)
179  CALL plante(1)
180  stop
181 #endif
182 !
183 !-----------------------------------------------------------------------
184 !
185  RETURN
186  END
subroutine sd_strsg4(NPOIN, NSEG, GLOSEGB, NSEGBLK, GLOSEG4)
Definition: sd_strsg4.f:7
double precision, dimension(:), allocatable da_p4m
subroutine pre4_mumps(NPOIN, NSEGB, GLOSEGB, DAB1, DAB2, DAB3, DAB4, XAB1, XAB2, XAB3, XAB4, XX1, XX2, CVB1, CVB2, TYPEXT1, TYPEXT2, TYPEXT3, TYPEXT4, KNOLG, NPOIN_TOT)
Definition: pre4_mumps.F:9
subroutine sd_fabsg4(NPOIN, NSEG, DAB1, DAB2, DAB3, DAB4, XAB1, XAB2, XAB3, XAB4, NPBLK, NSEGBLK, DA, XA, TYPEXT1, TYPEXT2, TYPEXT3, TYPEXT4)
Definition: sd_fabsg4.f:8
subroutine solve_mumps_par(NPOIN, NSEGB, GLOSEG, MAXSEG, DA, XA, XINC, RHS, TYPEXT, KNOLG, NPOIN_TOT)
double precision, dimension(:), allocatable xa_p4m
integer, dimension(:), allocatable gloseg4_p4m
Definition: bief.f:3