The TELEMAC-MASCARET system  trunk
addtracer.f
Go to the documentation of this file.
1 ! ********************
2  SUBROUTINE addtracer
3 ! ********************
4 !
5  & (nametrac,mtrac,itrac,add,name1,name2,unit0)
6 !
7 !
8 !***********************************************************************
9 ! BIEF V7P3
10 !***********************************************************************
11 !
12 !brief adds tracer to the existing list of tracers
13 !+
14 !+ Re-working NAMETRAC to avoid conflicting naming convention
15 !+ between user defined tracers, water quality processes and
16 !+ ice processes.
17 !+ If NAME1 or NAME2 are already in NAMETRAC, then ITRAC takes
18 !+ the index of that tracer. Otherwise, a new tracer is added to
19 !+ NAMETRAC and MTRAC is increased by one.
20 !
21 !history S.E. BOURBAN (HRW)
22 !+ 07/06/2017
23 !+ V7P3
24 !+ First implementation
25 !
26 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 !| ITRAC |<--| FINAL INDEX OF THE TRACER
28 !| MTRAC |<->| TOTAL NUMBER OF TRACERS, COULD VARY HERE
29 !| NAME1,NAME2 |-->| NAMES IN FRENCH AND ENGLISH OF THE TRACER TO ADD
30 !| NAMETRAC |<->| TABLE CONTAINING TRACERS' NAMES
31 !| UNIT0 |-->| UNIT OF THE TRACER TO ADD
32 !| ADD |-->| OPTIONAL: WHETHER TO ADD THE TRACER OR NOT
33 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
34 !
36  USE bief, ex_addtracer => addtracer
37 !
38  IMPLICIT NONE
39 !
40 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41 !
42 !
43  INTEGER, INTENT(INOUT):: MTRAC,ITRAC
44  CHARACTER(LEN=32), INTENT(INOUT):: NAMETRAC(*)
45  CHARACTER(LEN=16), INTENT(IN) :: NAME1,NAME2,UNIT0
46  LOGICAL, INTENT(IN) :: ADD
47 !
48 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49 !
50 !-----------------------------------------------------------------------
51  INTEGER :: I
52 !-----------------------------------------------------------------------
53  itrac = 0
54  DO i = 1,mtrac
55  IF( nametrac(i)(1:16) .EQ. name1 ) THEN
56  itrac = i
57  ELSEIF( nametrac(i)(1:16) .EQ. name2 ) THEN
58  itrac = i
59  ENDIF
60  ENDDO
61  IF( itrac.EQ.0 .AND. add) THEN
62  mtrac = mtrac + 1
63  itrac = mtrac
64  IF(lng.EQ.lng_fr)THEN
65  nametrac(itrac) = name1 // unit0
66  ELSE
67  nametrac(itrac) = name2 // unit0
68  ENDIF
69  ENDIF
70 !-----------------------------------------------------------------------
71  RETURN
72  END SUBROUTINE
73 !
74 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
75 !
integer, parameter lng_fr
Y. AUDOUIN & J-M HERVOUET (EDF LAB, LNHE) 09/05/2014 V7P0 First version.
subroutine addtracer(NAMETRAC, MTRAC, ITRAC, ADD, NAME1, NAME2, UNIT0)
Definition: addtracer.f:7
Definition: bief.f:3