The TELEMAC-MASCARET system  trunk
bief_allvec_in_block.f
Go to the documentation of this file.
1 ! *******************************
2  SUBROUTINE bief_allvec_in_block
3 ! *******************************
4 !
5  &( blo , n , nat , nomgen , ielm , ndim , statut , mesh )
6 !
7 !***********************************************************************
8 ! BIEF V7P3
9 !***********************************************************************
10 !
11 !brief ALLOCATES MEMORY FOR N VECTORS, WHICH WILL BE PART
12 !+ OF A GIVEN BLOCK.
13 !
14 !note THIS MODIFICATION OF ALLVEC_IN_BLOCK ALLOWS ADDING A NUMBER
15 !+ OF IDENTICALLY NUMBERED VECTORS TO AN ALREADY EXISTING BLOCK
16 !+ WITHOUT DESTROYING THE PREVIOUS STRUCTURE.
17 !
18 !history J-M HERVOUET (LNH)
19 !+ 11/07/1995
20 !+ V5P1
21 !+ First version
22 !
23 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
24 !+ 13/07/2010
25 !+ V6P0
26 !+ Translation of French comments within the FORTRAN sources into
27 !+ English comments
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 21/08/2010
31 !+ V6P0
32 !+ Creation of DOXYGEN tags for automated documentation and
33 !+ cross-referencing of the FORTRAN sources
34 !
35 !history J-M HERVOUET (jubilado)
36 !+ 07/09/2017
37 !+ V7P3
38 !+ Allowing several successive allocations of the same BIEF_OBJ.
39 !
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !| BLO |<->| BLOCK WHERE THE VECTORS WILL BE ALLOCATED
42 !| IELM |-->| TYPE OF ELEMENT OF VECTORS, OR DIMENSION
43 !| | | (DEPENDING ON 'STATUT', SEE BELOW)
44 !| N |-->| NUMBER OF VECTORS TO BE ALLOCATED
45 !| NAT |<--| 1: REAL VECTOR 2:VECTOR OF INTEGERS
46 !| NDIM |-->| SECOND DIMENSION OF VECTORS
47 !| NOMGEN |-->| GENERIC NAME OF VECTORS
48 !| | | WILL BE COMPLETED WITH RANK
49 !| STATUT |-->| VECTOR STATUS:
50 !| | | 0 : FREE VECTOR, IELM IS ITS DIMENSION
51 !| | | 1 : VECTOR DEFINED ON A MESH
52 !| | | IELM IS THEN THE ELEMENT TYPE
53 !| | | CHANGING DISCRETISATION FORBIDDEN
54 !| | | 2 : LIKE 1 BUT CHANGING DISCRETISATION ALLOWED
55 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56 !
57  USE bief, ex_bief_allvec_in_block => bief_allvec_in_block
58 !
60  IMPLICIT NONE
61 !
62 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
63 !
64  TYPE(bief_obj) , INTENT(INOUT) :: BLO
65  INTEGER , INTENT(IN) :: IELM,NDIM,STATUT,NAT,N
66  CHARACTER(LEN=6), INTENT(IN) :: NOMGEN
67  TYPE(bief_mesh) , INTENT(IN) :: MESH
68 !
69 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70 !
71  INTEGER IDEB,I,II
72 !
73  CHARACTER(LEN=6) :: NOM
74  CHARACTER(LEN=1), PARAMETER :: CHIFFRE(0:9) =
75  & (/'0','1','2','3','4','5','6','7','8','9'/)
76 !
77 !-----------------------------------------------------------------------
78 !
79  ideb = 6
80  DO i=5,2,-1
81  IF(nomgen(i:i).EQ.' ') ideb = i
82  ENDDO
83 !
84 !-----------------------------------------------------------------------
85 !
86  IF(blo%N+n.LE.blo%MAXBLOCK) THEN
87 !
88  IF(n.GT.0) THEN
89 !
90  DO i = blo%N+1 , blo%N+n
91 !
92 ! NAME OF THE VECTOR
93 !
94  nom=nomgen
95  IF(i.LT.10) THEN
96  ideb = min(6,ideb)
97  nom(ideb:ideb) = chiffre(i)
98  ELSEIF(i.LT.100) THEN
99  ideb = min(5,ideb)
100  nom(ideb :ideb ) = chiffre(i/10)
101  nom(ideb+1:ideb+1) = chiffre(i-10*(i/10))
102  ELSEIF(i.LT.1000) THEN
103  ideb = min(4,ideb)
104  nom(ideb :ideb ) = chiffre(i/100)
105  ii=i-100*(i/100)
106  nom(ideb+1:ideb+1) = chiffre(ii/10)
107  nom(ideb+2:ideb+2) = chiffre(ii-10*(ii/10))
108  ELSE
109  WRITE(lu,*) 'MORE THAN 999 VECTORS ASKED
110  & IN ALLVEC_IN_BLOCK'
111  CALL plante(1)
112  stop
113  ENDIF
114 !
115 ! ALLOCATES THE VECTOR
116 !
117  IF(.NOT.ASSOCIATED(blo%ADR(i)%P)) THEN
118  ALLOCATE(blo%ADR(i)%P)
119  NULLIFY(blo%ADR(i)%P%R)
120  NULLIFY(blo%ADR(i)%P%I)
121  ENDIF
122  CALL bief_allvec(nat,blo%ADR(i)%P,nom,ielm,ndim,statut,mesh)
123  blo%ADR(i)%P%FATHER = blo%NAME
124 !
125  ENDDO ! I
126 !
127  blo%N=blo%N+n
128 !
129  ENDIF
130 !
131  ELSE
132 !
133  WRITE(lu,*) 'BIEF_ALLVEC_IN_BLOCK:'
134  WRITE(lu,*) 'MORE THAN ',blo%MAXBLOCK,'(',n,')'
135  WRITE(lu,*) 'VECTORS TO BE ALLOCATED'
136  WRITE(lu,*) 'CHANGE MAXBLOCK IN ALLBLO.'
137  CALL plante(1)
138  stop
139 !
140  ENDIF
141 !
142 !-----------------------------------------------------------------------
143 !
144  RETURN
145  END
subroutine bief_allvec(NAT, VEC, NOM, IELM, DIM2, STATUT, MESH)
Definition: bief_allvec.f:7
subroutine bief_allvec_in_block(BLO, N, NAT, NOMGEN, IELM, NDIM, STATUT, MESH)
Definition: bief.f:3