The TELEMAC-MASCARET system  trunk
bief_allmat.f
Go to the documentation of this file.
1 ! **********************
2  SUBROUTINE bief_allmat
3 ! **********************
4 !
5  &( mat , nom , ielm1 , ielm2 , cfg , typdia , typext , mesh )
6 !
7 !***********************************************************************
8 ! BIEF V7P3
9 !***********************************************************************
10 !
11 !brief ALLOCATES MEMORY FOR A REAL MATRIX STRUCTURE.
12 !
13 !history J-M HERVOUET (LNH)
14 !+ 01/03/95
15 !+ V5P1
16 !+ First version.
17 !
18 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
19 !+ 13/07/2010
20 !+ V6P0
21 !+ Translation of French comments within the FORTRAN sources into
22 !+ English comments
23 !
24 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
25 !+ 21/08/2010
26 !+ V6P0
27 !+ Creation of DOXYGEN tags for automated documentation and
28 !+ cross-referencing of the FORTRAN sources
29 !
30 !history J-M HERVOUET (jubilado)
31 !+ 04/11/2016
32 !+ V7P3
33 !+ Allowing several successive allocations of the same BIEF_OBJ.
34 !
35 !history J-M HERVOUET (jubilado)
36 !+ 08/09/2017
37 !+ V7P3
38 !+ Optional argument REFINE removed.
39 !
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !| CFG |-->| INFORMATION ON STORAGE OF MATRIX
42 !| | | CFG(1): STORAGE CFG(2): MATRIX-VECTOR PRODUCT
43 !| IELM1 |-->| TYPE OF ELEMENT PER LINE
44 !| IELM2 |-->| TYPE OF ELEMENT PER COLUMN
45 !| MAT |<->| THE MATRIX TO BE ALLOCATED
46 !| MESH |-->| MESH STRUCTURE
47 !| NOM |-->| FORTRAN NAME OF MATRIX
48 !| TYPDIA |-->| TYPE OF DIAGONAL ('Q', 'I' OU '0')
49 !| TYPEXT |-->| TYPE OF OFF-DIAGONAL TERMS :'Q','S' OU '0'
50 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 !
52  USE bief, ex_bief_allmat => bief_allmat
53 !
55  IMPLICIT NONE
56 !
57 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
58 !
59  TYPE(bief_obj) , INTENT(INOUT) :: MAT
60  CHARACTER(LEN=6), INTENT(IN) :: NOM
61  INTEGER , INTENT(IN) :: IELM1,IELM2,CFG(2)
62  CHARACTER(LEN=1), INTENT(IN) :: TYPDIA,TYPEXT
63  TYPE(bief_mesh) , INTENT(IN) :: MESH
64 !
65 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66 !
67  INTEGER IELMD
68 !
69  CHARACTER(LEN=6) :: NAME
70 !
71 !-----------------------------------------------------------------------
72 ! HEADER COMMON TO ALL OBJECTS
73 !-----------------------------------------------------------------------
74 !
75 ! KEY OF THE OBJECT - TO CHECK MEMORY CRASHES
76 !
77  mat%KEY = 123456
78 !
79 ! TYPE OF THE OBJECT (HERE MATRIX)
80 !
81  mat%TYPE = 3
82 !
83 ! Defines how the object was created
84 !
85  mat%FATHER = 'XXXXXX'
86 !
87 ! NAME OF THE OBJECT
88 !
89  mat%NAME = nom
90 !
91 !-----------------------------------------------------------------------
92 ! PART SPECIFIC TO MATRICES
93 !-----------------------------------------------------------------------
94 !
95 ! ELEMENT OF DIAGONAL (SMALLEST ELEMENT IF MATRIX IS RECTANGULAR)
96  ielmd = ielm1
97  IF(bief_nbpts(ielm2,mesh).LT.bief_nbpts(ielm1,mesh)) ielmd = ielm2
98 !
99 ! TYPE OF STORAGE
100 !
101  mat%STO = cfg(1)
102 !
103 ! TYPES OF ELEMENTS FOR LINE AND COLUMN
104 !
105  mat%ELMLIN = ielm1
106  mat%ELMCOL = ielm2
107 !
108 ! ALLOCATES THE DIAGONAL (UNTIL HERE MAT%D IS ONLY A POINTER)
109 !
110 ! MAT%D WILL POINT TO A BIEF_OBJ
111  IF(.NOT.ASSOCIATED(mat%D)) CALL first_all_biefobj(mat%D)
112 !
113  name = 'D' // nom(1:5)
114  IF(typdia(1:1).EQ.'Q') THEN
115 ! ONLY CASE WHERE THE DIAGONAL DOES EXIST
116  CALL bief_allvec(1,mat%D,name,ielmd,1,2,mesh)
117  ELSE
118  CALL bief_allvec(1,mat%D,name,0 ,1,0,mesh)
119  ENDIF
120 ! TYPE IS FORGOTTEN UNTIL INITIALISATION OF MATRIX
121 ! MAT%TYPDIA = TYPDIA(1:1)
122  mat%TYPDIA = '?'
123 !
124 ! ALLOCATES OFF-DIAGONAL TERMS (AS FOR DIAGONAL)
125 !
126  IF(.NOT.ASSOCIATED(mat%X)) CALL first_all_biefobj(mat%X)
127 !
128  name = 'X' // nom(1:5)
129 !
130  CALL bief_allvec(1,mat%X,name,
131  & bief_dim1_ext(ielm1,ielm2,cfg(1),typext,mesh),
132  & bief_dim2_ext(ielm1,ielm2,cfg(1),typext,mesh),0,mesh)
133 !
134 ! TYPE IS FORGOTTEN UNTIL INITIALISATION OF MATRIX
135 ! MAT%TYPEXT = TYPEXT(1:1)
136  mat%TYPEXT = '?'
137 !
138 ! MATRIX X VECTOR PRODUCT
139  mat%PRO = cfg(2)
140 !
141 !-----------------------------------------------------------------------
142 !
143  RETURN
144  END
integer function bief_nbpts(IELM, MESH)
Definition: bief_nbpts.f:7
integer function bief_dim1_ext(IELM1, IELM2, STO, TYPEXT, MESH)
Definition: bief_dim1_ext.f:7
subroutine bief_allvec(NAT, VEC, NOM, IELM, DIM2, STATUT, MESH)
Definition: bief_allvec.f:7
integer function bief_dim2_ext(IELM1, IELM2, STO, TYPEXT, MESH)
Definition: bief_dim2_ext.f:7
subroutine bief_allmat(MAT, NOM, IELM1, IELM2, CFG, TYPDIA, TYPEXT, MESH)
Definition: bief_allmat.f:7
subroutine first_all_biefobj(OBJ)
Definition: bief.f:3