The TELEMAC-MASCARET system  trunk
cormar.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE cormar
3 ! *****************
4 !
5  &( part, utel, vtel, htel )
6 !
7 !***********************************************************************
8 ! TOMAWAC V7P3 27/07/2017
9 !***********************************************************************
10 !
11 !brief INITIALISES ARRAYS OF PHYSICAL PARAMETERS.
12 !
13 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
14 !+ 13/07/2010
15 !+ V6P0
16 !+ Translation of French comments within the FORTRAN sources into
17 !+ English comments
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 21/08/2010
21 !+ V6P0
22 !+ Creation of DOXYGEN tags for automated documentation and
23 !+ cross-referencing of the FORTRAN sources
24 !
25 !history G.MATTAROLO (EDF)
26 !+ 05/2011
27 !+ V6P1
28 !+ Modification for direct coupling with TELEMAC
29 !
30 !history G.MATTAROLO (EDF - LNHE)
31 !+ 14/06/2011
32 !+ V6P1
33 !+ Translation of French names of the variables in argument
34 !
35 !history J-M HERVOUET (EDF - LNHE)
36 !+ 07/12/2012
37 !+ V6P3
38 !+ Taking into account tidal flats + various optimisations.
39 !
40 !history J-M HERVOUET (EDF - LNHE)
41 !+ 08/01/2014
42 !+ V7P0
43 !+ CALL PARCOM suppressed by using new argument ASSPAR in VECTOR
44 !
45 !history Y AUDOUIN (LNHE)
46 !+ 25/05/2015
47 !+ V7P0
48 !+ Modification to comply with the hermes module
49 !
50 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 !| AT |-->| COMPUTATION TIME
52 !| HTEL |-->| TELEMAC WATER DEPTH
53 !| LT |-->| NUMBER OF THE TIME STEP CURRENTLY SOLVED
54 !| NVCOU |<--| NUMBER OF VARIABLES OF THE FORMATTED CURRENT FILE
55 !| NVHMA |<--| N.OF VARIABLES OF THE FORMATTED WATER LEVEL FILE
56 !| PART |-->| FLAG FOR DIRECT COUPLING WITH TELEMAC
57 !| TC1 |<--| TIME T1 IN THE CURRENT FILE
58 !| TC2 |<--| TIME T2 IN THE CURRENT FILE
59 !| TM1 |<--| TIME T1 IN THE WATER LEVEL FILE
60 !| TM2 |<--| TIME T2 IN THE WATER LEVEL FILE
61 !| UTEL |-->| X-AXIS TELEMAC CURRENT SPEED
62 !| VTEL |-->| Y-AXIS TELEMAC CURRENT SPEED
63 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64 !
65  USE bief
68 !
69  USE interface_tomawac, ex_cormar => cormar
70 !
72  IMPLICIT NONE
73 !
74 !
75 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
76 !
77  INTEGER, INTENT(IN) :: PART
78  TYPE(bief_obj), INTENT(IN) :: UTEL,VTEL,HTEL
79 !
80 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
81 !
82  INTEGER IP,UL
83  LOGICAL TROUVE(3)
84  CHARACTER(LEN=8) FMTCOU, FMTMAR
85 !
86 !-----------------------------------------------------------------------
87 !
88 ! UPDATES THE TIDAL CURRENT AND WATER LEVEL ARRAYS
89 ! ================================================
90 !
91 ! UPDATES THE CURRENT AT TIME 'AT'
92 !
93  IF(namcob(1:1).NE.' '.OR. namcof(1:1).NE.' ' ) THEN
94 !
95  IF(namcob(1:1).NE.' ') THEN
96  ul=lucob
97  fmtcou=fmtcob
98  ELSE
99  ul=lucof
100  fmtcou=fmtcof
101  ENDIF
102  CALL noudon(uc,nameu, 2, vc,namev ,2, depth,nameh,1, npoin2,
103  & ul,fmtcou,at,tc1,tc2, uc1, uc2, vc1, vc2, zm1, zm2,
104  & indic,'COURANT',nvcou,texcob,trouve,unitcob,phascob)
105  IF(trouve(3)) THEN
106  CALL ov('X=Y-Z ', x=dzhdt, y=zm2, z=zm1, dim1=npoin2)
107  CALL ov('X=CX ', x=dzhdt, c=1.d0/(tc2-tc1), dim1=npoin2)
108  ENDIF
109 !
110  ELSEIF ((part.EQ.wac_full_run.OR.part.GE.wac_api_init).AND.
111  & (nammab(1:1).EQ.' ')) THEN
112 !
113  CALL anamar
114 !
115  ENDIF
116 !
117  IF(part.EQ.wac_cpl_run) THEN
118  CALL ov('X=Y ', x=uc, y=utel%R, dim1=npoin2)
119  CALL ov('X=Y ', x=vc, y=vtel%R, dim1=npoin2)
120  ENDIF
121 !
122 ! UPDATES THE WATER DEPTH AT TIME 'AT' IF NOT FOUND IN CURRENT FILE
123 !
124 ! IF(.NOT.TROUVE(3)) THEN
125  IF(nammab(1:1).NE.' '.OR.nammaf(1:1).NE.' ') THEN
126 !
127  IF(nammab(1:1).NE.' ') THEN
128  ul=lumab
129  fmtmar=fmtmab
130  ELSE
131  ul=lumaf
132  fmtmar=fmtmaf
133  ENDIF
134 !
135  CALL noudon(uc,nameu,0, vc,namev,0, depth,nameh,2, npoin2,
136  & ul,fmtmar, at, tm1, tm2, uc1, uc2, vc1, vc2,
137  & zm1, zm2, indim, 'HAUTEUR', nvhma, texmab,
138  & trouve,unitmab,phasmab)
139  CALL ov('X=Y-Z ', x=dzhdt, y=zm2, z=zm1, dim1=npoin2)
140  CALL ov('X=CX ', x=dzhdt, c=1.d0/(tm2-tm1), dim1=npoin2)
141 !
142  ELSEIF (part.EQ.wac_full_run.OR.part.GE.wac_api_init) THEN
143 !
144  IF(namcof(1:1).NE.' '.OR.namcob(1:1).NE.' ') THEN
145  CALL anamar
146  ENDIF
147 !
148  ENDIF
149 ! ENDIF
150 !
151  IF(part.EQ.wac_cpl_run) THEN
152 ! water depth time gradient is updated
153 ! SDEPTH has still water depth values of the previous time step)
154  DO ip=1,npoin2
155  dzhdt(ip)=(htel%R(ip)-depth(ip))/(nit*dt)
156  ENDDO
157 ! water depth is updated
158  CALL ov('X=Y ', x=depth, y=htel%R, dim1=npoin2)
159  ENDIF
160 !
161 ! UPDATES THE CURRENT AND WATER DEPTH GRADIENTS AT TIME 'AT'
162 !
163  IF(.NOT.proinf) THEN
164  CALL vector(sdzx,'=','GRADF X',ielm2,1.d0,sdepth,
165  & st0,st0,st0,st0,st0,mesh,.false.,st1,asspar=.true.)
166  CALL vector(sdzy,'=','GRADF Y',ielm2,1.d0,sdepth,
167  & st0,st0,st0,st0,st0,mesh,.false.,st1,asspar=.true.)
168  ENDIF
169 !
170  CALL vector(sdux,'=','GRADF X',ielm2,1.d0,suc,
171  & st0,st0,st0,st0,st0,mesh,.false.,st1,asspar=.true.)
172  CALL vector(sduy,'=','GRADF Y',ielm2,1.d0,suc,
173  & st0,st0,st0,st0,st0,mesh,.false.,st1,asspar=.true.)
174 !
175  CALL vector(sdvx,'=','GRADF X',ielm2,1.d0,svc,
176  & st0,st0,st0,st0,st0,mesh,.false.,st1,asspar=.true.)
177  CALL vector(sdvy,'=','GRADF Y',ielm2,1.d0,svc,
178  & st0,st0,st0,st0,st0,mesh,.false.,st1,asspar=.true.)
179 !
180 ! INTEGRAL OF TEST FUNCTIONS
181 !
182  CALL vector(st0,'=','MASBAS ',ielm2,1.d0,st1,
183  & st1,st1,st1,st1,st1,mesh,.false.,st1,asspar=.true.)
184 !
185  CALL ov('X=1/Y ', x=t0 ,y=t0, dim1=npoin2)
186 !
187 ! DIVISION BY INTEGRAL OF TEST FUNCTIONS TO GET NODAL VALUES
188 !
189  IF(.NOT.proinf) THEN
190  CALL ov('X=XY ', x=dzx, y=t0, dim1=npoin2)
191  CALL ov('X=XY ', x=dzy, y=t0, dim1=npoin2)
192  ENDIF
193  CALL ov('X=XY ', x=dux, y=t0, dim1=npoin2)
194  CALL ov('X=XY ', x=dvx, y=t0, dim1=npoin2)
195  CALL ov('X=XY ', x=duy, y=t0, dim1=npoin2)
196  CALL ov('X=XY ', x=dvy, y=t0, dim1=npoin2)
197 !
198 !-----------------------------------------------------------------------
199 !
200  RETURN
201  END
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
double precision, dimension(:), pointer dvx
double precision, dimension(:), pointer uc2
double precision, dimension(:), pointer dzhdt
double precision, dimension(:), pointer vc
double precision, dimension(:), pointer vc2
double precision, dimension(:), pointer depth
type(bief_obj), target sdux
double precision, dimension(:), pointer uc
type(bief_obj), target sdvy
type(bief_obj), target svc
double precision, target at
subroutine anamar
Definition: anamar.f:4
type(bief_obj), target sdzx
character(len=8), pointer fmtmab
double precision, dimension(:), pointer dzy
double precision, dimension(:), pointer y
type(bief_obj), target suc
character(len=32), dimension(30) texmab
character(len=path_len), pointer nammaf
subroutine noudon(F1, NAME1, MODE1, F2, NAME2, MODE2, F3, NAME3, MODE3, NPOIN, NDON, FFORMAT, AT, TV1, TV2, F11, F12, F21, F22, F31, F32, INDIC, CHDON, NVAR, TEXTE, TROUVE, UNITIME, PHASTIME)
Definition: noudon.f:10
integer, parameter wac_cpl_run
double precision, dimension(:), pointer vc1
character(len=path_len), pointer namcob
type(bief_obj), target st0
type(bief_obj), target sduy
double precision, dimension(:), pointer zm2
integer, parameter wac_api_init
type(bief_obj), target st1
double precision, dimension(:), pointer zm1
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
Definition: vector.f:7
subroutine cormar(PART, UTEL, VTEL, HTEL)
Definition: cormar.f:7
double precision, dimension(:), pointer uc1
character(len=8), pointer fmtcob
double precision, dimension(:), pointer dzx
character(len=8), pointer fmtmaf
type(bief_obj), target sdzy
character(len=8), pointer fmtcof
character(len=path_len), pointer namcof
double precision, dimension(:), pointer duy
type(bief_obj), target sdvx
double precision, dimension(:), pointer t0
double precision, dimension(:), pointer dux
type(bief_obj), target sdepth
character(len=32), dimension(30) texcob
character(len=path_len), pointer nammab
double precision, dimension(:), pointer x
type(bief_mesh), target mesh
double precision, dimension(:), pointer dvy
double precision, target dt
integer, parameter wac_full_run
Definition: bief.f:3