The TELEMAC-MASCARET system  trunk
filter.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE filter
3 ! *****************
4 !
5  &(vec,bldmat,t1,t2,
6  & a,formul,
7  & xmul,f,g,h,u,v,w,
8  & mesh,msk,maskel,n)
9 !
10 !***********************************************************************
11 ! BIEF V6P1 21/08/2010
12 !***********************************************************************
13 !
14 !brief FILTERS A VECTOR USING A MATRIX.
15 !+
16 !+ FOR EXAMPLE, THE USE OF A MASS MATRIX YIELDS
17 !+ SMOOTHING.
18 !
19 !note IF BLDMAT=.FALSE. MATRIX A IS GIVEN, IT IS NOT RE-BUILT.
20 !
21 !history J-M HERVOUET (LNH)
22 !+ 24/04/97
23 !+ V5P1
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 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 !| A |<->| MATRIX (GIVEN OR BUILT DEPENDING ON BLDMAT)
40 !| BLDMAT |-->| IF YES : MATRIX BUILT ACCORDING TO FORMUL
41 !| F,G,H,U,V,W |-->| FUNCTIONS THAT MAY BE USED FOR BUILDING A
42 !| FORMUL |-->| FORMULA DESCRIBING THE MATRIX (AS IN MATRIX)
43 !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS.
44 !| MASKEL |-->| MASKING OF ELEMENTS
45 !| | | =1. : NORMAL =0. : MASKED ELEMENT
46 !| N |-->| FILTERING WILL BE DONE N TIMES
47 !| T1 |<->| WORK ARRAY
48 !| T2 |<->| WORK ARRAY. MATRIX A LUMPED AT THE END
49 !| VEC |<->| VECTOR TO BE FILTERED
50 !| XMUL |-->| MULTIPLICATION FACTOR
51 !| | | NO INFLUENCE EXCEPT ON T2.
52 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53 !
54  USE bief, ex_filter => filter
55 !
57  IMPLICIT NONE
58 !
59 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60 !
61  INTEGER, INTENT(IN) :: N
62  DOUBLE PRECISION, INTENT(IN) :: XMUL
63  LOGICAL, INTENT(IN) :: BLDMAT,MSK
64  CHARACTER(LEN=16), INTENT(IN) :: FORMUL
65  TYPE(bief_mesh), INTENT(INOUT):: MESH
66  TYPE(bief_obj), INTENT(INOUT) :: VEC,A,T1,T2
67  TYPE(bief_obj), INTENT(IN) :: F,G,H,U,V,W,MASKEL
68 !
69 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70 !
71  INTEGER I
72 !
73  DOUBLE PRECISION C
74 !
75 !-----------------------------------------------------------------------
76 !
77  DO i=1,n
78 !
79 ! COMPUTES THE MATRIX ACCORDING TO THE GIVEN FORMULATION (OPTIONAL)
80 !
81  IF(bldmat.AND.i.EQ.1) THEN
82 !
83  CALL matrix(a,'M=N ',formul,vec%ELM,vec%ELM,
84  & xmul,f,g,h,u,v,w,mesh,msk,maskel)
85 !
86  ENDIF
87 !
88 !-----------------------------------------------------------------------
89 !
90 ! COMPUTES THE PRODUCT A * VEC (WITH ASSEMBLY)
91 !
92  CALL matvec( 'X=AY ',t1,a,vec,c,mesh)
93  IF(ncsize.GT.1) CALL parcom(t1,2,mesh)
94 !
95 !-----------------------------------------------------------------------
96 !
97 ! COMPRESSES A ON ITS DIAGONAL
98 !
99  IF(i.EQ.1) THEN
100  CALL lump(t2,a,mesh,xmul)
101  IF(ncsize.GT.1) CALL parcom(t2,2,mesh)
102  CALL os('X=1/Y ',x=t2,y=t2,iopt=2,infini=0.d0,zero=1.d-20)
103  ENDIF
104 !
105 !-----------------------------------------------------------------------
106 !
107 ! COMPUTES F = A * F / (ASSEMBLED A)
108 !
109 ! CHECKS DIVISIONS BY 0 CAUSED BY EXTERNAL POINTS IN
110 ! THE LEONARD FORMAT, WHICH CAN HAVE 0 VALUES
111 !
112  CALL os('X=YZ ',x=vec,y=t1,z=t2)
113 !
114 !-----------------------------------------------------------------------
115 !
116  ENDDO ! I
117 !
118 !-----------------------------------------------------------------------
119 !
120  RETURN
121  END
subroutine filter(VEC, BLDMAT, T1, T2, A, FORMUL, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, N)
Definition: filter.f:10
subroutine matrix(M, OP, FORMUL, IELM1, IELM2, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL)
Definition: matrix.f:7
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
subroutine parcom(X, ICOM, MESH)
Definition: parcom.f:7
subroutine matvec(OP, X, A, Y, C, MESH, LEGO)
Definition: matvec.f:7
subroutine lump(DIAG, A, MESH, XMUL)
Definition: lump.f:7
Definition: bief.f:3