The TELEMAC-MASCARET system  trunk
vgfpsi.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vgfpsi
3 ! *****************
4 !
5  &(res,ielm,u,v,f,dt,xmul,cflmax,t1,t2,mesh,msk,maskel)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief SAME AS VGRADF BUT WITH THE PSI SCHEME AND
12 !+ SUB-ITERATIONS TO REACH STABILITY.
13 !
14 !history J-M HERVOUET (LNHE)
15 !+ 18/02/08
16 !+ V5P9
17 !+
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,RIEHME (ADJOINTWARE)
32 !+ November 2016
33 !+ V7P2
34 !+ Replaced EXTERNAL statements to parallel functions / subroutines
35 !+ by the INTERFACE_PARALLEL
36 !
37 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38 !| CFLMAX |<--| MAXIMUM CFL NUMBER
39 !| DT |-->| TIME-STEP
40 !| F |-->| FUNCTION F
41 !| IELM |-->| TYPE OF ELEMENT OF RESULT
42 !| MASKEL |-->| MASKING OF ELEMENTS
43 !| | | =1. : NORMAL =0. : MASKED ELEMENT
44 !| MESH |-->| MESH STRUCTURE
45 !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS.
46 !| RES |<--| RESULTING VECTOR
47 !| T1 |<->| WORK ARRAY IN BIEF_OBJ STRUCTURE
48 !| T2 |<->| WORK ARRAY IN BIEF_OBJ STRUCTURE
49 !| U |-->| X-COMPONENT OF ADVECTION FIELD
50 !| V |-->| Y-COMPONENT OF ADVECTION FIELD
51 !| XMUL |-->| MULTIPLICATION FACTOR
52 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53 !
54  USE bief, ex_vgfpsi => vgfpsi
55 !
57  USE interface_parallel, ONLY : p_max
58  IMPLICIT NONE
59 !
60 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
61 !
62  INTEGER, INTENT(IN) :: IELM
63  LOGICAL, INTENT(IN) :: MSK
64 !
65  DOUBLE PRECISION, INTENT(IN) :: DT,XMUL
66  DOUBLE PRECISION, INTENT(OUT) :: CFLMAX
67 !
68 ! STRUCTURES
69 !
70  TYPE(bief_obj), INTENT(IN) :: U,V,F,MASKEL
71  TYPE(bief_obj), INTENT(INOUT) :: RES,T1,T2
72  TYPE(bief_mesh), INTENT(INOUT) :: MESH
73 !
74 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
75 !
76  INTEGER IT,NIT
77  DOUBLE PRECISION DDT
78 !
79  INTRINSIC int
80 !
81 !-----------------------------------------------------------------------
82 !
83 ! NUMBER OF NECESSARY SUB-ITERATIONS
84 !
85  CALL cflpsi(t1,u,v,dt,ielm,mesh,msk,maskel)
86  CALL maxi(cflmax,it,t1%R,bief_nbpts(ielm,mesh))
87  IF(ncsize.GT.1) cflmax=p_max(cflmax)
88 !
89  nit = int(cflmax) + 1
90 ! WRITE(LU,*) 'VGFPSI : NIT=',NIT,' CFLMAX=',CFLMAX
91 !
92  IF(nit.GT.100) THEN
93  WRITE(lu,901) nit
94 901 FORMAT(1x,'VGFPSI: ',1i6,' SUB-ITERATIONS REQUIRED FOR THE'
95  & ,/,1x, ' PSI SCHEME. DECREASE THE TIME-STEP')
96  CALL plante(1)
97  stop
98  ENDIF
99 !
100  ddt = dt/nit
101 !
102 ! T1 WILL TAKE THE SUCCESSIVE VALUES OF F
103  CALL os( 'X=Y ' , x=t1 , y=f )
104  IF(nit.GT.1) THEN
105  CALL vector(mesh%T,'=','MASBAS ',ielm,
106  & 1.d0,f,f,f,f,f,f,mesh,msk,maskel)
107  IF(ncsize.GT.1) CALL parcom(mesh%T,2,mesh)
108  CALL os('X=1/Y ',x=mesh%T,y=mesh%T,
109  & iopt=2,infini=0.d0,zero=1.d-8)
110  ENDIF
111 !
112 ! LOOP ON THE SUB-ITERATIONS
113 !
114  CALL cpstvc(f,res)
115 !
116  DO it=1,nit
117 !
118  IF(nit.GT.1) THEN
119  IF(it.EQ.1) CALL os('X=0 ',x=res)
120  CALL vector(t2,'=','VGRADF PSI',ielm,
121  & xmul,t1,t1,t1,u,v,v,mesh,msk,maskel)
122  CALL os('X=X+CY ',x=res,y=t2,c=1.d0/nit)
123  IF(ncsize.GT.1) CALL parcom(t2,2,mesh)
124  CALL os('X=X+CYZ ',x=t1,y=t2,z=mesh%T,c=-ddt/xmul)
125  ELSE
126  CALL vector(res,'=','VGRADF PSI',ielm,
127  & xmul,t1,t1,t1,u,v,v,mesh,msk,maskel)
128  ENDIF
129 !
130  ENDDO
131 !
132 !-----------------------------------------------------------------------
133 !
134  RETURN
135  END
integer function bief_nbpts(IELM, MESH)
Definition: bief_nbpts.f:7
subroutine cflpsi(SYGMA, U, V, DT, IELM, MESH, MSK, MASKEL)
Definition: cflpsi.f:7
subroutine vgfpsi(RES, IELM, U, V, F, DT, XMUL, CFLMAX, T1, T2, MESH, MSK, MASKEL)
Definition: vgfpsi.f:7
subroutine cpstvc(X, Y)
Definition: cpstvc.f:7
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
Definition: vector.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 maxi(XMAX, IMAX, X, NPOIN)
Definition: maxi.f:7
Definition: bief.f:3