The TELEMAC-MASCARET system  trunk
lecdon_telemac3d_gaia.F
Go to the documentation of this file.
1 ! *********************************
2  SUBROUTINE lecdon_telemac3d_gaia
3 ! *********************************
4 !
5  &(motcar,file_desc,path,ncar,cas_file,dico_file,local_nsusp_tel)
6 !
7 !***********************************************************************
8 ! TELEMAC-3D
9 !***********************************************************************
10 !
11 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12 !| FILE_DESC |<--| STORES STRINGS 'SUBMIT' OF DICTIONARY
13 !| MOTCAR |<--| VALUES OF KEY-WORDS OF TYPE CHARACTER
14 !| NCAR |-->| NUMBER OF LETTERS IN STRING PATH
15 !| PATH |-->| FULL PATH TO CODE DICTIONARY
16 !| LOCAL_NSUSP_TEL|<->| NUMBER OF SUSPENDED SEDIMENTS
17 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 !
23 !
25  IMPLICIT NONE
26 !
27 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28 !
29  INTEGER, INTENT(IN) :: NCAR
30  INTEGER, INTENT(INOUT) :: LOCAL_NSUSP_TEL
31  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: PATH
32  CHARACTER(LEN=PATH_LEN), INTENT(INOUT) :: MOTCAR(maxkeyword)
33  CHARACTER(LEN=PATH_LEN), INTENT(INOUT) :: FILE_DESC(4,maxkeyword)
34 ! API
35  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: CAS_FILE
36  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: DICO_FILE
37 !
38 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
39 !
40  INTEGER :: I,K,ICO,INCO
41  INTEGER :: MOTINT(maxkeyword)
42  INTEGER :: TROUVE(4,maxkeyword)
43  INTEGER :: ADRESS(4,maxkeyword)
44  INTEGER :: DIMENS(4,maxkeyword)
45  DOUBLE PRECISION :: MOTREA(maxkeyword)
46  LOGICAL :: DOC
47  LOGICAL :: MOTLOG(maxkeyword)
48  CHARACTER(LEN=250) :: NOM_CAS
49  CHARACTER(LEN=250) :: NOM_DIC
50  CHARACTER(LEN=72) :: MOTCLE(4,maxkeyword,2)
51  CHARACTER(LEN=3) :: SEDTYPE
52 
53  INTEGER :: ID_DICO, ID_CAS
54 !
55 !-----------------------------------------------------------------------
56 !
57  CHARACTER(LEN=2) CHAR2
58  INTEGER :: TMP_NTRAC
59 !
60 !-----------------------------------------------------------------------
61 !
62 ! INITIALISES THE VARIABLES FOR DAMOCLES CALL :
63 !
64  DO k = 1, maxkeyword
65 ! A FILENAME NOT GIVEN BY DAMOCLES WILL BE RECOGNIZED AS A WHITE SPACE
66 ! (IT MAY BE THAT NOT ALL COMPILERS WILL INITIALISE LIKE THAT)
67  motcar(k)(1:1)=' '
68 !
69  dimens(1,k) = 0
70  dimens(2,k) = 0
71  dimens(3,k) = 0
72  dimens(4,k) = 0
73  ENDDO
74 !
75 ! WRITES OUT INFO
76  doc = .false.
77 !
78 !-----------------------------------------------------------------------
79 ! OPENS DICTIONNARY AND STEERING FILES
80 !-----------------------------------------------------------------------
81 !
82  IF(ncar.GT.0) THEN
83 !
84  nom_dic=path(1:ncar)//'GAIDICO'
85  nom_cas=path(1:ncar)//'GAICAS'
86 !
87  ELSE
88 !
89  nom_dic='GAIDICO'
90  nom_cas='GAICAS'
91 !
92  ENDIF
93  IF((cas_file(1:1).NE.' ').AND.(dico_file(1:1).NE.' ')) THEN
94  WRITE(lu,*) 'FIXED DICO AND STEERING FILE PRESENT'
95  nom_dic=dico_file
96  nom_cas=cas_file
97  WRITE(lu,*) 'NOM_DIC',nom_dic
98  WRITE(lu,*) 'NOM_CAS',nom_cas
99  ENDIF
100 !
101  CALL get_free_id(id_dico)
102  OPEN(id_dico,file=nom_dic,form='FORMATTED',action='READ')
103  CALL get_free_id(id_cas)
104  OPEN(id_cas,file=nom_cas,form='FORMATTED',action='READ')
105 !
106 !-----------------------------------------------------------------------
107 ! CALLS DAMOCLES
108 !-----------------------------------------------------------------------
109 !
110  CALL damocle( adress, dimens ,maxkeyword, doc , lng , lu ,
111  & motint, motrea ,motlog , motcar ,
112  & motcle, trouve ,id_dico, id_cas,.false. ,file_desc)
113 !
114 !-----------------------------------------------------------------------
115 ! CLOSES DICTIONNARY AND STEERING FILES
116 !-----------------------------------------------------------------------
117 !
118  CLOSE(id_dico)
119  CLOSE(id_cas)
120 !
121 !-----------------------------------------------------------------------
122 !
123 ! MAXIMUM NUMBER OF BOUNDARIES
124  maxfro = motint( adress(1,58) )
125  sortis = motcar( adress(4, 2) )(1:72)
126 !
127  susp = motlog( adress(3, 7) )
128  nsicla = dimens(4,59)
129 ! TYPE OF SEDIMENT AND NSICLA
130  ico = 1
131  inco = 1
132  IF(nsicla.GT.0) THEN
133  tmp_ntrac = ntrac
134  DO i=1,nsicla
135  sedtype = motcar(adress(4,59)+i-1)(1:3)
136  IF(sedtype.EQ.'CO') THEN
137  WRITE(char2,'(I2)') ico
138  ico = ico + 1
139  local_nsusp_tel = local_nsusp_tel + 1
140  CALL addtracer(nametrac,ntrac,k,.true.,
141  & 'SEDIMENT COH' //adjustl(char2)//' ',
142  & 'COH SEDIMENT' //adjustl(char2)//' ',
143  & 'g/l ')
144  ELSE IF(sedtype.EQ.'NCO'.AND.susp) THEN
145  IF(susp) THEN
146  WRITE(char2,'(I2)') inco
147  inco = inco + 1
148  local_nsusp_tel = local_nsusp_tel + 1
149  CALL addtracer(nametrac,ntrac,k,.true.,
150  & 'SEDIMENT NCOH' //adjustl(char2)//' ',
151  & 'NCOH SEDIMENT' //adjustl(char2)//' ',
152  & 'g/l ')
153  ENDIF
154  ELSE IF(sedtype.NE.'CO'.AND.sedtype.NE.'NCO') THEN
155  WRITE(lu,*)'LECDON_T3D_GAIA: CHECK TYPE OF SEDIMENT'
156  WRITE(lu,*)'POSSIBLE CHOICES ARE: CO AND NCO'
157  CALL plante(1)
158  stop
159  ENDIF
160  ENDDO
161 
162  ! Check if we added some tracers
163  IF(ntrac.GT.tmp_ntrac) THEN
164  ind_sed = tmp_ntrac+1
165  ELSE
166  ind_sed = 0
167  ENDIF
168  ENDIF
169 !
170 ! MAIN SETTINGS FOR SUSPENDED SEDIMENTS WHICH ARE NECESSARY IN T3D
171 !
172  IF(local_nsusp_tel.GT.0) THEN
173  ALLOCATE(schadvsed(local_nsusp_tel))
174  ALLOCATE(optadv_sed(local_nsusp_tel))
175  ALLOCATE(slvsed(local_nsusp_tel))
176  ALLOCATE(sed0(local_nsusp_tel))
177  ALLOCATE(presed(local_nsusp_tel*maxfro))
178  ALLOCATE(sedsce(maxsce,local_nsusp_tel))
179  ALLOCATE(verprosed(maxfro*local_nsusp_tel))
180  ALLOCATE(dnusedh(local_nsusp_tel))
181  ALLOCATE(dnusedv(local_nsusp_tel))
182  DO i=1,local_nsusp_tel
183 ! DEFAULT VALUE FOR ADVECTION SCHEME FOR SUSPENDED SEDIMENTS: PSI SCHEME
184  schadvsed(i)=5
185 ! DEFAULT VALUE FOR ADVECTION SCHEME OPTION: LOCAL IMPLICIT SCHEME
186  optadv_sed(i)=4
187 ! FIRST ASSUMING A SINGLE VALUE FOR SOLVER FOR DIFFUSION OF SUSPENDED SEDIMENTS
188  slvsed(i)%SLV= motint(adress(1,26))
189 ! FIRST ASSUMING A SINGLE VALUE FOR SOLVER OPTION FOR DIFFUSION OF SUSPENDED SEDIMENTS
190  slvsed(i)%KRYLOV= motint(adress(1,27))
191 ! FIRST ASSUMING A SINGLE VALUE FOR PRECONDITIONING FOR SOLVER FOR DIFFUSION OF SUSPENDED SEDIMENTS
192  slvsed(i)%PRECON= motint(adress(1,28))
193 ! FIRST ASSUMING A SINGLE VALUE FOR MAXIMUM NUMBER OF ITERATIONS FOR SOLVER FOR DIFFUSION OF SUSPENDED SEDIMENTS
194  slvsed(i)%NITMAX= motint(adress(1,29))
195 ! CHOICE OF ACCURACY FOR SOLVER FOR DIFFUSION OF SUSPENDED SEDIMENTS:
196 ! ASSUMING A SINGLE VALUE FOR ALL SOLVERS
197  slvsed(i)%EPS= motrea(adress(2,21))
198 ! INITIALIZATION OF COEFFICIENTS FOR DIFFUSION
199  dnusedh(i)=1.d-6
200  dnusedv(i)=1.d-6
201  ENDDO
202 ! CHOICE OF ADVECTION SCHEME FOR SUSPENDED SEDIMENTS
203  IF(trouve(1,8).EQ.2) THEN
204  DO i=1,dimens(1,8)
205  schadvsed(i)=motint(adress(1,8)+i-1)
206  ENDDO
207  ENDIF
208 ! CHOICE OF ADVECTION SCHEME OPTION FOR SUSPENDED SEDIMENTS
209  IF(trouve(1,9).EQ.2) THEN
210  DO i=1,dimens(1,9)
211  optadv_sed(i)=motint(adress(1,9)+i-1)
212  ENDDO
213  ENDIF
214 ! NOW TAKING INTO ACCOUNT MULTIPLE VALUES FOR SOLVER FOR DIFFUSION OF SUSPENDED SEDIMENTS
215  IF(trouve(1,26).EQ.2) THEN
216  DO i=1,dimens(1,26)
217  slvsed(i)%SLV=motint(adress(1,26)+i-1)
218  ENDDO
219  ENDIF
220 ! NOW TAKING INTO ACCOUNT MULTIPLE VALUES FOR SOLVER OPTION FOR DIFFUSION OF SUSPENDED SEDIMENTS
221  IF(trouve(1,27).EQ.2) THEN
222  DO i=1,dimens(1,27)
223  slvsed(i)%KRYLOV=motint(adress(1,27)+i-1)
224  ENDDO
225  ENDIF
226 ! NOW TAKING INTO ACCOUNT MULTIPLE VALUES FOR PRECONDIT FOR DIFFUSION OF SUSPENDED SEDIMENTS
227  IF(trouve(1,28).EQ.2) THEN
228  DO i=1,dimens(1,28)
229  slvsed(i)%PRECON=motint(adress(1,28)+i-1)
230  ENDDO
231  ENDIF
232 ! NOW TAKING INTO ACCOUNT MULTIPLE VALUES FOR MAXIMUM NUMBER OF ITERATIONS FOR DIFFUSION OF SUSPENDED SEDIMENTS
233  IF(trouve(1,29).EQ.2) THEN
234  DO i=1,dimens(1,29)
235  slvsed(i)%NITMAX=motint(adress(1,29)+i-1)
236  ENDDO
237  ENDIF
238 ! SINGLE VALUE FOR SCHEME FOR DIFFUSION OF SUSPENDED SEDIMENTS
239  schdsed = motint(adress(1,25))
240  DO i=1,local_nsusp_tel
241 ! INITIAL VALUES OF SUSPENDED SEDIMENT INITIALIZE TO ZERO
242  sed0(i)=0.d0
243 ! INITIAL VALUES READ FROM GAIA STEERING FILE
244  IF(dimens(2,12).GE.i) THEN
245  sed0(i) = motrea(adress(2,12)+i-1)
246  ENDIF
247  ENDDO
248  npresed = dimens(2,13)
249  IF(npresed.NE.0) THEN
250  DO i=1,npresed
251 ! PRESCRIBED VALUES OF SEDIMENTS AT BOUNDARIES
252  presed(i)=motrea(adress(2,13)+i-1)
253  ENDDO
254  ENDIF
255  nsedsce=dimens(2,38)
256  IF(nsedsce.NE.0) THEN
257  DO i=1,local_nsusp_tel
258 ! AT THIS STAGE WE DON'T KNOW HOW MANY SOURCES THERE ARE
259 ! (BY REGIONS OR BY COORD OR BY SOURCE NODES) SINCE THEY ARE
260 ! READ LATER IN THE LECDON_TELEMAC2D
261  DO k=1,maxsce
262  sedsce(k,i)=motrea(adress(2,38)+(k-1)*local_nsusp_tel+i-1)
263  ENDDO
264  ENDDO
265  ENDIF
266  DO i=1,maxfro*local_nsusp_tel
267 ! VERTICAL PROFILE FOR SEDIMENTS INITIALIZED TO 1
268  verprosed(i)=1
269  ENDDO
270 ! THEN READ FROM GAIA STEERING FILE
271  nverprosed=dimens(1,3)
272  IF(nverprosed.GT.0) THEN
273  DO i=1,nverprosed
274  verprosed(i) = motint(adress(1,3)+i-1)
275  ENDDO
276  ENDIF
277 ! HORIZONTAL AND VERTICAL DIFFUSION COEFFICIENTS
278  IF(trouve(2,44).EQ.2.AND.dimens(2,44).EQ.local_nsusp_tel) THEN
279  DO i=1,ntrac
280  dnusedh(i) = motrea(adress(2,44)+i-1)
281  ENDDO
282  ELSEIF(trouve(2,44).EQ.2.AND.dimens(2,44).LT.local_nsusp_tel
283  & .AND.dimens(2,44).GT.0) THEN
284 ! READING WHAT HAS BEEN GIVEN
285  DO i=1,dimens(2,44)
286  dnusedh(i) = motrea(adress(2,44)+i-1)
287  ENDDO
288 ! COMPLETING WITH THE LAST GIVEN
289  DO i=dimens(2,44)+1,local_nsusp_tel
290  dnusedh(i) = motrea(adress(2,44)+dimens(2,44)-1)
291  ENDDO
292  ENDIF
293  IF(trouve(2,45).EQ.2.AND.dimens(2,45).EQ.local_nsusp_tel) THEN
294  DO i=1,ntrac
295  dnusedv(i) = motrea(adress(2,45)+i-1)
296  ENDDO
297  ELSEIF(trouve(2,45).EQ.2.AND.dimens(2,45).LT.local_nsusp_tel
298  & .AND.dimens(2,45).GT.0) THEN
299 ! READING WHAT HAS BEEN GIVEN
300  DO i=1,dimens(2,45)
301  dnusedv(i) = motrea(adress(2,45)+i-1)
302  ENDDO
303 ! COMPLETING WITH THE LAST GIVEN
304  DO i=dimens(2,45)+1,local_nsusp_tel
305  dnusedv(i) = motrea(adress(2,45)+dimens(2,45)-1)
306  ENDDO
307  ENDIF
308 ! WARNING:COEFFICIENT FOR DIFFUSION OF SUSPENDED SEDIMENTS
309 ! IS ONLY FOR 2D SIMULATIONS
310  IF(trouve(2,43).EQ.2) THEN
311  WRITE(lu,*)'WARNING: COEFFICIENT FOR DIFFUSION OF'
312  WRITE(lu,*)'SUSPENDED SEDIMENTS IS NOT USED IN 3D:'
313  WRITE(lu,*)'YOU NEED TO SET THE HORIZONTAL AND VERTICAL ONE'
314  ENDIF
315  ENDIF
316 !----------------------------------------------------------------
317 !
318  RETURN
319  END
character(len=32), dimension(:), allocatable nametrac
logical, target susp
Suspension : yes if there is at least one suspended sediment this is the case if there is mud or if s...
integer, dimension(:), allocatable verprosed
double precision, dimension(:), allocatable dnusedh
Coefficient for horizontal diffusion of suspended sediments in 3D.
integer, parameter maxkeyword
integer nverprosed
Number of sediment vertical profiles.
integer npresed
Number of prescribed suspended sediments for TELEMAC3D or TELEMAC2D.
subroutine lecdon_telemac3d_gaia(MOTCAR, FILE_DESC, PATH, NCAR, CAS_FILE, DICO_FILE, LOCAL_NSUSP_TEL)
double precision, dimension(:), allocatable sed0
Initial values of suspended sediments.
integer, target nsicla
Number of sediment classes of bed material (less than NISCLM)
double precision, dimension(:), allocatable presed
Prescribed values of suspended sediments.
integer, dimension(:), allocatable schadvsed
Scheme for advection of suspended sediments.
subroutine damocle(ADRESS, DIMENS, NMAX, DOC, LLNG, LLU, MOTINT, MOTREA, MOTLOG, MOTCAR, MOTCLE, TROUVE, NFICMO, NFICDA, GESTD, MOTATT)
Definition: damocle.f:9
double precision, dimension(:), allocatable dnusedv
Coefficient for vertical diffusion of suspended sediments in 3D.
integer maxfro
Maximum number of (liquid boundaries, solid boundaries)
character(len=72) sortis
List of the variable to ouput in the result file.
integer nsedsce
Number of suspended sediments at the sources.
subroutine addtracer(NAMETRAC, MTRAC, ITRAC, ADD, NAME1, NAME2, UNIT0)
Definition: addtracer.f:7
integer schdsed
Scheme for diffusion of suspended sediments in 3D.
type(slvcfg), dimension(:), allocatable slvsed
Solver for the diffusion of sediment.
double precision, dimension(:,:), allocatable sedsce
Values of suspended sediments at the sources.
integer, dimension(:), allocatable optadv_sed
Advection scheme options for suspended sediments.