The TELEMAC-MASCARET system  trunk
dirich.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE dirich
3 ! *****************
4 !
5  &(f, s, sm , fbor,limdir,work,mesh,kdir,msk,maskpt)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief TAKES INTO ACCOUNT POINTS OF TYPE DIRICHLET IN A SYSTEM
12 !+ OF LINEAR EQUATIONS WITH SYMMETRICAL MATRIX.
13 !+
14 !+ IN THE EQUATIONS FOR POINTS NOT OF TYPE DIRICHLET :
15 !+ DIRICHLET VALUES ARE REMOVED.
16 !+
17 !+ IN THE EQUATIONS FOR POINTS OF TYPE DIRICHLET :
18 !+ DEFINES AN EQUATION FIXING THE IMPOSED VALUE.
19 !
20 !warning FOR SYSTEMS OF MATRICES BLOCKS :
21 !+ THE EXTRA-DIAGONAL MATRICES MUST BE NONSYMMETRICAL
22 !+ BECAUSE TAKING INTO ACCOUNT THE DIRICHLET POINTS
23 !+ MAKES THEM NONSYMMETRICAL
24 !
25 !history J-M HERVOUET (LNHE)
26 !+ 11/07/2008
27 !+ V5P9
28 !+ LIMPRO DIMENSION MODIFIED FOR QUADRATIC ELEMENTS
29 !
30 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
31 !+ 13/07/2010
32 !+ V6P0
33 !+ Translation of French comments within the FORTRAN sources into
34 !+ English comments
35 !
36 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
37 !+ 21/08/2010
38 !+ V6P0
39 !+ Creation of DOXYGEN tags for automated documentation and
40 !+ cross-referencing of the FORTRAN sources
41 !
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !| F |-->| VARIABLE THAT WILL BE GIVEN ITS DIRICHLET VALUE
44 !| FBOR |-->| DIRICHLET BOUNDARY CONDITIONS
45 !| KDIR |-->| CONVENTION FOR DIRICHLET BOUNDARY CONDITIONS
46 !| LIMDIR |-->| TYPES OF BOUNDARY CONDITIONS
47 !| | | IF LIMDIR(K) = KDIR LE KTH BOUNDARY POINT
48 !| | | IS OF DIRICHLET TYPE.
49 !| MASKPT |-->| MASKING PER POINT.
50 !| | | =1. : NORMAL =0. : MASKED
51 !| MESH |-->| MESH STRUCTURE
52 !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS.
53 !| S |<->| MATRIX OF THE LINEAR SYSTEM
54 !| SM |-->| RIGHT HAND SIDE
55 !| WORK |-->| BLOCK OF WORK ARRAYS
56 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57 !
58  USE bief, ex_dirich => dirich
59 !
61  IMPLICIT NONE
62 !
63 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 !
65  TYPE(bief_mesh), INTENT(INOUT) :: MESH
66 ! DIMLIM,6
67  INTEGER , INTENT(IN) :: KDIR,LIMDIR(*)
68  LOGICAL , INTENT(IN) :: MSK
69  TYPE(bief_obj) , INTENT(INOUT) :: WORK
70  TYPE(bief_obj) , INTENT(INOUT) :: F,SM,S
71  TYPE(bief_obj) , INTENT(IN) :: FBOR,MASKPT
72 !
73 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
74 !
75  INTEGER DIMLIM
76 !
77 !----------------------------------------------------------------------
78 !
79 ! IF S IS A MATRIX
80 !
81  IF(s%TYPE.EQ.3) THEN
82 !
83  CALL diri01(f, s, sm , fbor,limdir,work%ADR(1)%P,work%ADR(2)%P,
84  & mesh,kdir,msk,maskpt)
85 !
86 ! IF S IS A BLOCK OF 4 MATRICES
87 !
88  ELSEIF(s%TYPE.EQ.4.AND.s%N.EQ.4) THEN
89 !
90  dimlim=max(fbor%ADR(1)%P%DIM1,
91  & fbor%ADR(2)%P%DIM1)
92 !
93  CALL diri04(f%ADR(1)%P,f%ADR(2)%P,
94  & s%ADR(1)%P,s%ADR(2)%P,s%ADR(3)%P,s%ADR(4)%P,
95  & sm%ADR(1)%P,sm%ADR(2)%P,
96  & work%ADR(1)%P,work%ADR(2)%P,work%ADR(3)%P,work%ADR(4)%P,
97  & fbor%ADR(1)%P,fbor%ADR(2)%P,
98  & limdir(1:dimlim),limdir(dimlim+1:2*dimlim),
99  & mesh,kdir,msk,maskpt)
100 !
101 ! IF S IS A BLOCK OF 9 MATRICES
102 !
103  ELSEIF(s%TYPE.EQ.4.AND.s%N.EQ.9) THEN
104 !
105  dimlim=max(fbor%ADR(1)%P%DIM1,
106  & fbor%ADR(2)%P%DIM1,
107  & fbor%ADR(3)%P%DIM1)
108 !
109  CALL diri09(f%ADR(1)%P,f%ADR(2)%P,f%ADR(3)%P,
110  & s%ADR(1)%P,s%ADR(2)%P,s%ADR(3)%P,
111  & s%ADR(4)%P,s%ADR(5)%P,s%ADR(6)%P,
112  & s%ADR(7)%P,s%ADR(8)%P,s%ADR(9)%P,
113  & sm%ADR(1)%P,sm%ADR(2)%P,sm%ADR(3)%P,
114  & work%ADR(1)%P,work%ADR(2)%P,work%ADR(3)%P,
115  & work%ADR(4)%P,work%ADR(5)%P,work%ADR(6)%P,
116  & fbor%ADR(1)%P,fbor%ADR(2)%P,fbor%ADR(3)%P,
117  & limdir( 1: dimlim),
118  & limdir( dimlim+1:2*dimlim),
119  & limdir(2*dimlim+1:3*dimlim),
120  & mesh,kdir,msk,maskpt)
121 !
122 ! ERROR
123 !
124  ELSE
125 !
126  WRITE(lu,1001) s%TYPE
127 1001 FORMAT(1x,'DIRICH (BIEF): WRONG TYPE FOR S:',1i6)
128  CALL plante(1)
129  stop
130 !
131  ENDIF
132 !
133 !----------------------------------------------------------------------
134 !
135  RETURN
136  END
subroutine diri01(F, S, SM, FBOR, LIMDIR, WORK1, WORK2, MESH, KDIR, MSK, MASKPT)
Definition: diri01.f:7
subroutine diri09(X1, X2, X3, A11, A12, A13, A21, A22, A23, A31, A32, A33, SM1, SM2, SM3, T1, T2, T3, T4, T5, T6, XBOR1, XBOR2, XBOR3, LIDIR1, LIDIR2, LIDIR3, MESH, KDIR, MSK, MASKPT)
Definition: diri09.f:11
subroutine dirich(F, S, SM, FBOR, LIMDIR, WORK, MESH, KDIR, MSK, MASKPT)
Definition: dirich.f:7
subroutine diri04(X1, X2, A11, A12, A21, A22, SM1, SM2, T1, T2, T3, T4, XBOR1, XBOR2, LIDIR1, LIDIR2, MESH, KDIR, MSK, MASKPT)
Definition: diri04.f:8
Definition: bief.f:3