The TELEMAC-MASCARET system  trunk
cpstmt.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE cpstmt
3 ! *****************
4 !
5  &( x , y , trans )
6 !
7 !***********************************************************************
8 ! BIEF V7P2
9 !***********************************************************************
10 !
11 !brief COPIES A MATRIX STRUCTURE ONTO ANOTHER.
12 !+ X COPIED ONTO Y.
13 !
14 !history J-M HERVOUET (LNHE)
15 !+ 03/02/2010
16 !+ V6P0
17 !+ First version.
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !
31 !history J-M HERVOUET (LNHE)
32 !+ 22/03/2016
33 !+ V7P2
34 !+ Adding the copy of STOX.
35 !
36 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 !| TRANS |-->| IF YES, Y WILL BE CONSIDERED TRANSPOSED OF X
38 !| X |-->| THE STRUCTURE OF X WILL BE COPIED ON Y
39 !| Y |<->| THE MODIFIED MATRIX STRUCTURE
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !
42  USE bief, ex_cpstmt => cpstmt
43 !
45  IMPLICIT NONE
46 !
47 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 !
49  TYPE(bief_obj), INTENT(IN) :: X
50  TYPE(bief_obj), INTENT(INOUT) :: Y
51  LOGICAL, INTENT(IN), OPTIONAL :: TRANS
52 !
53 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54 !
55  INTEGER IELM1,IELM2,IELN1,IELN2
56  LOGICAL TR
57 !
58 !-----------------------------------------------------------------------
59 ! TREATS ONLY MATRICES HERE :
60 !-----------------------------------------------------------------------
61 !
62  IF(x%TYPE.NE.3.OR.y%TYPE.NE.3) THEN
63  WRITE(lu,201) x%NAME,x%TYPE,y%NAME,y%TYPE
64 201 FORMAT(1x,'CPSTMT : FORBIDDEN CASE FOR X AND Y:',/,1x,
65  & 'X=',a6,' TYPE :',1i6 ,/,1x,
66  & 'Y=',a6,' TYPE :',1i6)
67  CALL plante(1)
68  stop
69  ENDIF
70 !
71 !-----------------------------------------------------------------------
72 !
73  IF(PRESENT(trans)) THEN
74  tr = trans
75  ELSE
76  tr = .false.
77  ENDIF
78 !
79  IF(.NOT.tr) THEN
80  ielm1 = x%ELMLIN
81  ielm2 = x%ELMCOL
82  ELSE
83  ielm1 = x%ELMCOL
84  ielm2 = x%ELMLIN
85  ENDIF
86 !
87 ! CONTROLS MEMORY SIZE FOR DIAGONAL AND EXTRA-DIAGONAL TERMS :
88 !
89  IF(x%D%DIM1.GT.y%D%MAXDIM1.OR.
90  & x%X%DIM2*x%X%DIM1.GT.y%X%MAXDIM1*y%X%MAXDIM2) THEN
91  ieln1 = y%ELMLIN
92  ieln2 = y%ELMCOL
93  WRITE(lu,401) x%NAME,ielm1,ielm2,y%NAME,ieln1,ieln2
94  WRITE(lu,403) x%TYPDIA,x%D%DIM1,x%TYPEXT,
95  & x%X%DIM2*x%X%DIM1,
96  & y%TYPDIA,y%D%MAXDIM1,
97  & y%TYPEXT,y%X%MAXDIM1*y%X%MAXDIM2
98  401 FORMAT(1x,'CPSTMT : FORBIDDEN CASE FOR X AND Y:',/,1x,
99  & 'X=',a6,/,1x,'ELEMENTS ',1i3,' AND ',1i3,/,1x,
100  & 'Y=',a6,/,1x,'ELEMENTS ',1i3,' AND ',1i3,/,1x,
101  & 'Y IS SMALLER THAN X')
102  403 FORMAT(1x,'X HAS A DIAGONAL OF TYPE ',a1,/,1x,
103  & 'WITH A SIZE OF ',1i8,/,1x,
104  & 'AND OFF-DIAGONAL TERMS OF TYPE ',a1,/,1x,
105  & 'WITH A SIZE OF ',1i8,/,1x,
106  & 'Y HAS A DIAGONAL OF TYPE ',a1,/,1x,
107  & 'AND A MAXIMUM SIZE OF ',1i8,/,1x,
108  & 'AND OFF-DIAGONAL TERMS OF TYPE ',a1,/,1x,
109  & 'AND A MAXIMUM SIZE OF ',1i8)
110  CALL plante(1)
111  stop
112  ENDIF
113 !
114 ! COPIES TYPES OF ELEMENTS
115 !
116  y%ELMLIN = ielm1
117  y%ELMCOL = ielm2
118 !
119 ! 4) COPIES TYPES OF DIAGONAL AND EXTRADIAGONAL TERMS
120 !
121  CALL cpstvc(x%D,y%D)
122  CALL cpstvc(x%X,y%X)
123 !
124 ! 5) COPIES THE MATRIX CHARACTERISTICS
125 !
126  y%TYPDIA = x%TYPDIA
127  y%TYPEXT = x%TYPEXT
128  y%STOX = x%STOX
129 !
130 !-----------------------------------------------------------------------
131 !
132  RETURN
133  END
subroutine cpstmt(X, Y, TRANS)
Definition: cpstmt.f:7
subroutine cpstvc(X, Y)
Definition: cpstvc.f:7
Definition: bief.f:3