The TELEMAC-MASCARET system  trunk
algae_transp.f
Go to the documentation of this file.
1  MODULE algae_transp
2  USE bief_def, ONLY : bief_obj
3 
6  IMPLICIT NONE
7 !***********************************************************************
8 ! TELEMAC2D V6P3 14/06/2013
9 ! EDF R&D antoine.joly@edf.fr
10 !***********************************************************************
11 !
12 !brief MODULE USED FOR ALGAE TRANSPORT
13 !
14 !history A. JOLY
15 !+ 14/06/2013
16 !+ V6P3
17 !+ First version
18 !
19 ! SUBROUTINES MADE AVAILABLE
21  & disp_algae
22 !
23 ! MAXIMUM NUMBER OF ALGAE CLASSES - FOR MEMORY ALLOCATION PURPOSES
24  INTEGER :: nalg_clss
25 ! MAXIMUM NUMBER OF ALGAE CLASSES - FOR MEMORY ALLOCATION PURPOSES
26  INTEGER, PARAMETER :: max_nalg_clss = 10
27 !
28 ! MODEL VARIABLES
29 ! MEAN FLUID VARIABLES AT THE POSITION OF EACH ALGAE PARTICLES
30  TYPE(bief_obj):: u_x_av_0
33  TYPE(bief_obj):: u_x_av
34  TYPE(bief_obj):: u_y_av
35  TYPE(bief_obj):: u_z_av
36  TYPE(bief_obj):: k_av_0
38  TYPE(bief_obj):: k_av
39  TYPE(bief_obj):: eps_av
40  TYPE(bief_obj):: h_flu
41 ! VARIABLES OF THE BODIES
42  TYPE(bief_obj):: u_x_0
43  TYPE(bief_obj):: u_y_0
44  TYPE(bief_obj):: u_z_0
45  TYPE(bief_obj):: u_x
46  TYPE(bief_obj):: u_y
47  TYPE(bief_obj):: u_z
48  TYPE(bief_obj):: v_x_0
49  TYPE(bief_obj):: v_y_0
50  TYPE(bief_obj):: v_z_0
51  TYPE(bief_obj):: v_x
52  TYPE(bief_obj):: v_y
53  TYPE(bief_obj):: v_z
54  TYPE(bief_obj):: dx_a
55  TYPE(bief_obj):: dy_a
56  TYPE(bief_obj):: dz_a
57  TYPE(bief_obj):: teff
58  TYPE(bief_obj):: i_a_gl
60 ! VARIABLES USED TO CALCULATE THE BASSET HISTORY FORCE
61  INTEGER:: nb
62  INTEGER:: ib
63  INTEGER:: np
64  INTEGER:: ip
65  DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE:: t_til_p
66  DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE:: a_p
67  INTEGER:: nwin
68  INTEGER:: iwin
69  DOUBLE PRECISION:: twin
70  DOUBLE PRECISION,DIMENSION(:,:,:),ALLOCATABLE:: psi
71  DOUBLE PRECISION:: phi_plus
72  DOUBLE PRECISION:: phi_moins
73  DOUBLE PRECISION:: cb
74  DOUBLE PRECISION,DIMENSION(:,:,:),ALLOCATABLE:: fi_p
75  DOUBLE PRECISION:: f_tail
76  DOUBLE PRECISION:: ci_bas
77  ! algae_transp
78  DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE :: u_i_0_algae
79  DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE :: u_i_algae
80  DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE :: v_i_0_algae
81  DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE :: v_i_algae
82  DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE :: x_i_0_algae
83  DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE :: x_i_algae
84  DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE :: c_i_algae
85 !
86  SAVE
87 !
88  CONTAINS
89 !
90 ! **********************
91  SUBROUTINE alloc_algae
92 ! **********************
93 !
94  &(np_tot,mesh,dt)
95 !
96 !***********************************************************************
97 ! TELEMAC 2D VERSION 6.3 MAI 2013 ANTOINE JOLY
98 ! EDF R&D antoine.joly@edf.fr
99 !***********************************************************************
100 !
101 !brief ALLOCATES THE VARIABLES ASSOCIATED TO THE ALGAE PARTICLES
102 !
103 !-----------------------------------------------------------------------
104 ! ARGUMENTS
105 ! .________________.____.______________________________________________.
106 ! | NAME |MODE| ROLE |
107 ! |________________|____|______________________________________________|
108 ! | DT | -->| NUMERICAL TIME STEP OF THE SIMULATIONS |
109 ! | MESH | -->| MESH STRUCTURE WITH ALL THE INFORMATIONS |
110 ! | | | OF THE MESH TREATED |
111 ! | NP_TOT | -->| TOTAL NUMBER OF ALGAE PARTICLES |
112 ! |________________|____|______________________________________________|
113 ! MODE : -->(NON MODIFIED DATA), <--(RESULT), <-->(MODIFIED DATA)
114 !
115 !-----------------------------------------------------------------------
116 !
117 ! CALLED BY : DERIVE
118 !
119 ! SUBROUTINE CALLED : INIT_BASSET
120 !
121 !***********************************************************************
122 !
123  USE bief
124  USE streamline
125 !
127  IMPLICIT NONE
128 !
129 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
130 !
131  INTEGER , INTENT(IN) :: NP_TOT
132  TYPE(bief_mesh) , INTENT(IN) :: MESH
133  DOUBLE PRECISION, INTENT(IN) :: DT
134 !
135 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
136 !
137  INTEGER I
138 !
139 !=======================================================================
140 ! ALLOCATE THE VARIABLES
141 !=======================================================================
142 ! MEAN FLUID VARIABLES
143  CALL bief_allvec(1,u_x_av_0,'UX_AV0',np_tot,1,0,mesh)
144  CALL bief_allvec(1,u_y_av_0,'UY_AV0',np_tot,1,0,mesh)
145  CALL bief_allvec(1,u_z_av_0,'UZ_AV0',np_tot,1,0,mesh)
146  CALL bief_allvec(1,u_x_av,'U_X_AV',np_tot,1,0,mesh)
147  CALL bief_allvec(1,u_y_av,'U_Y_AV',np_tot,1,0,mesh)
148  CALL bief_allvec(1,u_z_av,'U_Z_AV',np_tot,1,0,mesh)
149  CALL bief_allvec(1,k_av_0,'K_AV_0',np_tot,1,0,mesh)
150  CALL bief_allvec(1,eps_av_0,'E_AV_0',np_tot,1,0,mesh)
151  CALL bief_allvec(1,k_av,'K_AVER',np_tot,1,0,mesh)
152  CALL bief_allvec(1,eps_av,'E_AVER',np_tot,1,0,mesh)
153  CALL bief_allvec(1,h_flu,'H_FL_A',np_tot,1,0,mesh)
154 ! VARIABLES OF THE BODIES
155  CALL bief_allvec(1,u_x_0,'UF_X_0',np_tot,1,0,mesh)
156  CALL bief_allvec(1,u_y_0,'UF_Y_0',np_tot,1,0,mesh)
157  CALL bief_allvec(1,u_z_0,'UF_Z_0',np_tot,1,0,mesh)
158  CALL bief_allvec(1,u_x,'UFLU_X',np_tot,1,0,mesh)
159  CALL bief_allvec(1,u_y,'UFLU_Y',np_tot,1,0,mesh)
160  CALL bief_allvec(1,u_z,'UFLU_Z',np_tot,1,0,mesh)
161  CALL bief_allvec(1,v_x_0,'VC_X_0',np_tot,1,0,mesh)
162  CALL bief_allvec(1,v_y_0,'VC_Y_0',np_tot,1,0,mesh)
163  CALL bief_allvec(1,v_z_0,'VC_Z_0',np_tot,1,0,mesh)
164  CALL bief_allvec(1,v_x,'VCOR_X',np_tot,1,0,mesh)
165  CALL bief_allvec(1,v_y,'VCOR_Y',np_tot,1,0,mesh)
166  CALL bief_allvec(1,v_z,'VCOR_Y',np_tot,1,0,mesh)
167  CALL bief_allvec(1,dx_a,'DX_ALG',np_tot,1,0,mesh)
168  CALL bief_allvec(1,dy_a,'DY_ALG',np_tot,1,0,mesh)
169  CALL bief_allvec(1,dz_a,'DZ_ALG',np_tot,1,0,mesh)
170  CALL bief_allvec(1,teff,'TEFF__',np_tot,1,0,mesh)
171  CALL bief_allvec(2,i_a_gl,'I_A_GL',np_tot,1,0,mesh)
172  CALL bief_allvec(2,dislodge,'DISLOD',np_tot,1,0,mesh)
173 ! VARIABLES USED TO CALCULATE THE BASSET HISTORY FORCE
174  CALL init_basset(np_tot,mesh%DIM1,dt)
175 !
176 !=======================================================================
177 ! INITIALISE THE VARIABLES
178 !=======================================================================
179 ! MEAN FLUID VARIABLES
180  CALL os('X=C ',x=u_x_av,c=0.d0)
181  CALL os('X=C ',x=u_y_av,c=0.d0)
182  CALL os('X=C ',x=u_z_av,c=0.d0)
183  CALL os('X=C ',x=k_av,c=0.d0)
184  CALL os('X=C ',x=eps_av,c=1.d0)
185  CALL os('X=C ',x=h_flu,c=1.d0)
186 ! VARIABLES OF THE BODIES
187  CALL os('X=C ',x=u_x,c=0.d0)
188  CALL os('X=C ',x=u_y,c=0.d0)
189  CALL os('X=C ',x=u_z,c=0.d0)
190  CALL os('X=C ',x=v_x,c=0.d0)
191  CALL os('X=C ',x=v_y,c=0.d0)
192  CALL os('X=C ',x=v_z,c=0.d0)
193  CALL os('X=C ',x=dx_a,c=0.d0)
194  CALL os('X=C ',x=dy_a,c=0.d0)
195  CALL os('X=C ',x=dz_a,c=0.d0)
196  CALL os('X=C ',x=teff,c=0.d0)
197  DO i = 1,np_tot
198  dislodge%I(i) = 0
199  ENDDO
200 !=======================================================================
201 ! ALLOCATE VARIABLES USED IN PARALLEL TRANSPORT
202 !=======================================================================
203  IF(ncsize.GT.1) CALL organise_algs(np_tot,nwin*mesh%DIM1)
204 !
205  RETURN
206  END SUBROUTINE alloc_algae
207 !
208 ! **********************
209  SUBROUTINE init_basset
210 ! **********************
211 !
212  &(n_a,ndim,dt)
213 !
214 !***********************************************************************
215 ! TELEMAC 2D VERSION 6.3 MAI 2013 ANTOINE JOLY
216 ! EDF R&D antoine.joly@edf.fr
217 !***********************************************************************
218 !
219 !brief ALLOCATES THE VARIABLES USED TO CALCULATE THE BASSET
220 !+ HISTORY FORCE
221 !
222 !-----------------------------------------------------------------------
223 ! ARGUMENTS
224 ! .________________.____.______________________________________________.
225 ! | NAME |MODE| ROLE |
226 ! |________________|____|______________________________________________|
227 ! | NA | -->| TOTAL NUMBER OF ALGAE PARTICLES |
228 ! | NDIM | -->| NUMBER OF DIMENSIONS TREATED IN THE |
229 ! | | | SIMULATION |
230 ! | DT | -->| NUMERICAL TIME STEP OF THE SIMULATIONS |
231 ! |________________|____|______________________________________________|
232 ! MODE : -->(NON MODIFIED DATA), <--(RESULT), <-->(MODIFIED DATA)
233 !
234 !-----------------------------------------------------------------------
235 !
236 ! CALLED BY : ALLOC_ALGAE
237 !
238 ! SUBROUTINE CALLED : NONE
239 !
240 !***********************************************************************
241 !
242 !
244  IMPLICIT NONE
245 !
246 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
247 !
248  INTEGER ,INTENT(IN) :: N_A
249  INTEGER ,INTENT(IN) :: NDIM
250  DOUBLE PRECISION,INTENT(IN) :: DT
251  INTEGER :: I_A
252  INTEGER :: I_DIM
253 !
254 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
255 !
256 !
257  np=10
258 !
259  IF(ALLOCATED(t_til_p))DEALLOCATE(t_til_p)
260  ALLOCATE(t_til_p(np))
261  t_til_p(1)=0.1d0
262  t_til_p(2)=0.3d0
263  t_til_p(3)=1.d0
264  t_til_p(4)=3.d0
265  t_til_p(5)=10.d0
266  t_til_p(6)=40.d0
267  t_til_p(7)=190.d0
268  t_til_p(8)=1000.d0
269  t_til_p(9)=6500.d0
270  t_til_p(10)=50000.d0
271 !
272  IF(ALLOCATED(a_p))DEALLOCATE(a_p)
273  ALLOCATE(a_p(np))
274  a_p(1)=0.23477481312586d0
275  a_p(2)=0.28549576238194d0
276  a_p(3)=0.28479416718255d0
277  a_p(4)=0.26149775537574d0
278  a_p(5)=0.32056200511938d0
279  a_p(6)=0.35354490689146d0
280  a_p(7)=0.39635904496921d0
281  a_p(8)=0.42253908596514d0
282  a_p(9)=0.48317384225265d0
283  a_p(10)=0.63661146557001d0
284 !
285  IF(ALLOCATED(fi_p))DEALLOCATE(fi_p)
286  ALLOCATE(fi_p(n_a,2,np))
287  DO i_a=1,n_a
288  DO i_dim=1,2
289  DO ip=1,np
290  fi_p(i_a,i_dim,ip)=0.d0
291  END DO
292  END DO
293  END DO
294 !
295  nwin=100
296  twin=REAL(nwin)*DT
297 !
298  IF(ALLOCATED(psi))DEALLOCATE(psi)
299  ALLOCATE(psi(n_a,ndim,nwin+1))
300  DO i_a=1,n_a
301  DO i_dim=1,ndim
302  DO iwin=1,nwin+1
303  psi(i_a,i_dim,iwin)=0.d0
304  END DO
305  END DO
306  END DO
307 !
308  RETURN
309  END SUBROUTINE init_basset
310 !
311 ! ************************
312  SUBROUTINE interp_algae
313 ! ************************
314 !
315  &(np,np_tot,shp_p,shz_p,elt_p,u_x_av,u_y_av,u_z_av,k_av,eps_av,
316  & h_flu,npoin,ielm,ndp,ndp2,nplan,nelmax,ikle,w1,
317  & ielmu,npoinu,uconv,vconv,wconv,
318  & ak,ep,h)
319 !
320 !***********************************************************************
321 ! TELEMAC 2D VERSION 6.3 MAI 2013 ANTOINE JOLY
322 ! EDF R&D antoine.joly@edf.fr
323 !***********************************************************************
324 !
325 !brief INTERPOLATES THE MEAN FLUID VARIABLES AT THE POSITIONS
326 !+ OF EACH ALGAE PARTICLE
327 !
328 !note THIS SUBROUTINE HAS BEEN WRITTEN TO WORK IN 2D ONLY
329 !+ AND IT DOES NOT WORK FOR QUADRATIC ELEMENTS (IELM=13)
330 !
331 !-----------------------------------------------------------------------
332 ! ARGUMENTS
333 ! .________________.____.______________________________________________.
334 ! | NAME |MODE| ROLE |
335 ! |________________|____|______________________________________________|
336 ! | NP_TOT | -->| TOTAL NUMBER OF ALGAE PARTICLES |
337 ! | NP | -->| NUMBER OF ALGAE PARTICLES IN THE CURRENT |
338 ! | | | PROCESSOR |
339 ! | SHP_P | -->| 2D BARYCENTRIC COORDINATES FOR EACH ALGAE |
340 ! | | | PARTICLE |
341 ! | ELT_P | -->| NUMBER OF THE ELEMENT CONTAINING THE ALGAE |
342 ! | | | PARTICLE |
343 ! | U_X_AV,U_Y_AV |<-- | MEAN FLUID VELOCITIES AT THE POSITION OF |
344 ! | | | EACH ALGAE PARTICLE |
345 ! | K_AV,EPS_AV |<-- | TURBULENT PROPERTIES OF THE FLOW AT THE |
346 ! | | | POSITION OF EACH ALGAE PARTICLE |
347 ! | H_FLU |<-- | WATER DEPTH AT THE POSITION OF EACH ALGAE |
348 ! | | | PARTICLE |
349 ! | NPOIN | -->| NUMBER OF POINTS IN THE MESH |
350 ! | IELM | -->| ELEMENT TYPE OF THE MESH (ASSUMED THE SAME |
351 ! | | | FOR K, EPS AND H) |
352 ! | NDP | -->| NUMBER OF NODES PER ELEMENTS FOR IELM |
353 ! | NDP | -->| NUMBER OF NODES PER ELEMENTS FOR IELMU |
354 ! | NPLAN | -->| NUMBER OF PLANES IN THE 3D MESH OF PRISMS |
355 ! | NELMAX | -->| MAXIMUM NUMBER OF ELEMENTS IN 2D |
356 ! | IKLE | -->| CONNECTIVITY TABLE |
357 ! | W1 | -->| TEMPORARY WORK ARRAY USED AS A BUFFER FOR |
358 ! | | | FREQUENCY |
359 ! | IELMU | -->| ELEMENT TYPE FOR U, V AND W |
360 ! | NPOINU | -->| NUMBER OF POINTS IN THE MESH FOR VARIABLES |
361 ! | | | U, V AND W |
362 ! | UCONV,VCONV, | -->| THE X, Y AND Z COMPONENTS OF THE FLUID |
363 ! | WCONV | | VELOCITIES AT EACH NODE OF THE MESH |
364 ! | AK,EPS | -->| TURBULENT PROPERTIES OF THE FLOW AT EACH |
365 ! | | | NODE OF THE MESH |
366 ! | H | -->| WATER DEPTH AT EACH NODE OF THE MESH |
367 ! |________________|____|______________________________________________|
368 ! MODE : -->(NON MODIFIED DATA), <--(RESULT), <-->(MODIFIED DATA)
369 !
370 !-----------------------------------------------------------------------
371 !
372 ! CALLED BY : DERIVE
373 !
374 ! SUBROUTINE CALLED : INIT_BASSET
375 !
376 !***********************************************************************
377 !
378  USE bief
379  USE streamline, ONLY : bief_interp
380 !
382  IMPLICIT NONE
383 
384 !
385 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
386 !
387 ! FLOW VARIABLES THAT ARE USED IN THE INTERPOLATION
388  INTEGER , INTENT(IN) :: NDP,NDP2,NPLAN,NELMAX
389  INTEGER , INTENT(IN) :: NPOIN,IELM,IELMU,NPOINU
390  DOUBLE PRECISION, INTENT(IN) :: UCONV(npoinu),VCONV(npoinu)
391  DOUBLE PRECISION, INTENT(IN) :: WCONV(npoinu)
392  DOUBLE PRECISION, INTENT(IN) :: AK(npoin),EP(npoin)
393  DOUBLE PRECISION, INTENT(IN) :: H(npoin)
394 ! ALGAE VARIABLES THAT NEED TO BE INTERPOLATED
395  INTEGER , INTENT(IN) :: NP,NP_TOT
396  DOUBLE PRECISION, INTENT(IN) :: SHP_P(ndp,np_tot)
397  INTEGER , INTENT(IN) :: IKLE(nelmax,ndp2)
398  DOUBLE PRECISION, INTENT(IN) :: SHZ_P(np_tot)
399  INTEGER , INTENT(IN) :: ELT_P(np_tot)
400  DOUBLE PRECISION, INTENT(OUT) :: U_X_AV(np_tot)
401  DOUBLE PRECISION, INTENT(OUT) :: U_Y_AV(np_tot)
402  DOUBLE PRECISION, INTENT(OUT) :: U_Z_AV(np_tot)
403  DOUBLE PRECISION, INTENT(OUT) :: K_AV(np_tot)
404  DOUBLE PRECISION, INTENT(OUT) :: EPS_AV(np_tot)
405  DOUBLE PRECISION, INTENT(OUT) :: H_FLU(np_tot)
406 ! BUFFERS (USED ON FREQUENCY)
407  DOUBLE PRECISION, INTENT(IN) :: W1(*)
408  INTEGER FRE(1)
409 !
410 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
411 !
412 !=======================================================================
413 ! INITIALISE THE VARIABLES
414 !=======================================================================
415 ! U,V,W
416  CALL bief_interp(uconv,u_x_av,shp_p,ndp,shz_p,elt_p,w1,fre,
417  & elt_p,np,npoinu,nplan,ielmu,ikle,nelmax,
418  & .false.,.false.)
419  CALL bief_interp(vconv,u_y_av,shp_p,ndp,shz_p,elt_p,w1,fre,
420  & elt_p,np,npoinu,nplan,ielmu,ikle,nelmax,
421  & .false.,.false.)
422  CALL bief_interp(wconv,u_z_av,shp_p,ndp,shz_p,elt_p,w1,fre,
423  & elt_p,np,npoinu,nplan,ielmu,ikle,nelmax,
424  & .false.,.false.)
425 ! K, EPS
426  CALL bief_interp(ak,k_av,shp_p,ndp,shz_p,elt_p,w1,fre,
427  & elt_p,np,npoin,1,ielm,ikle,nelmax,
428  & .false.,.false.)
429  CALL bief_interp(ep,eps_av,shp_p,ndp,shz_p,elt_p,w1,fre,
430  & elt_p,np,npoin,1,ielm,ikle,nelmax,
431  & .false.,.false.)
432 ! H
433  CALL bief_interp(h,h_flu,shp_p,ndp,shz_p,elt_p,w1,fre,
434  & elt_p,np,npoin,1,ielm,ikle,nelmax,
435  & .false.,.false.)
436 !
437  RETURN
438  END SUBROUTINE interp_algae
439 !
440 ! ********************
441  SUBROUTINE disp_algae
442 ! ********************
443 !
444  & (na_tot,na,ndim,dt,at,u_x_av_0,u_y_av_0,u_z_av_0,k_av_0,
446  & v_y_0,v_z_0,dx_a,dy_a,dz_a,elem_alg,u_x,u_y,u_z,v_x,v_y,v_z,
447  & x_a,y_a,z_a,lt,dalgae,ralgae,ealgae,talgae,yalgae,
448  & rel_algae)
449 !
450 !***********************************************************************
451 ! TELEMAC 2D VERSION 6.3 MAI 2013 ANTOINE JOLY
452 ! EDF R&D antoine.joly@edf.fr
453 !***********************************************************************
454 !
455 !brief CALCULATES THE TRANSPORT OF ALGAE PARTICLES AND OUTPUTS THE
456 !+ ASSOCIATED VALUES
457 !
458 !note THIS SUBROUTINE HAS BEEN WRITTEN TO WORK IN 2D ONLY
459 !
460 !history A. JOLY
461 !+ 14/06/2013
462 !+ V6P3
463 !+ First version
464 !
465 !history M.S.TURNBULL (HRW)
466 !+ 26/11/2019
467 !+ V8P2
468 !+ Algae Dislodgement
469 !
470 !-----------------------------------------------------------------------
471 ! ARGUMENTS
472 ! .________________.____.______________________________________________.
473 ! | NAME |MODE| ROLE |
474 ! |________________|____|______________________________________________|
475 ! | AT | -->| TIME IN SECONDS |
476 ! | NA_TOT | -->| TOTAL NUMBER OF ALGAE PARTICLES |
477 ! | NA | -->| NUMBER OF ALGAE PARTICLES IN THE CURRENT |
478 ! | | | PROCESSOR |
479 ! | NDIM | -->| NUMBER OF DIMENSIONS TREATED |
480 ! | DT | -->| TIME STEP OF THE SIMULATION |
481 ! | | | RELEASED |
482 ! | U_X_AV_0, | -->| MEAN FLUID VELOCITIES AT THE POSITION OF |
483 ! | U_Y_AV_0, | | EACH ALGAE PARTICLE ONE TIME STEP BEFORE |
484 ! | U_Z_AV_0 | | THE CALCULATIONS |
485 ! | U_X_AV,U_Y_AV, | -->| MEAN FLUID VELOCITIES AT THE POSITION OF |
486 ! | U_Y_AV | | EACH ALGAE PARTICLE |
487 ! | K_AV_0, | -->| TURBULENT PROPERTIES OF THE FLOW AT THE |
488 ! | EPS_AV_0 | | POSITION OF EACH ALGAE PARTICLE ONE TIME |
489 ! | | | STEP BEFORE THE CALCULATIONS |
490 ! | H_FLU | -->| WATER DEPTH AT THE POSITION OF EACH ALGAE |
491 ! | | | PARTICLE |
492 ! | U_X_0,U_Y_0, | -->| TURBULENT FLUID VELOCITIES AT THE POSITION |
493 ! | U_Z_0 | | OF EACH ALGAE PARTICLE ONE TIME STEP BEFORE |
494 ! | | | THE CALCULATIONS |
495 ! | U_X,U_Y,U_Z |<-- | TURBULENT FLUID VELOCITIES AT THE POSITION |
496 ! | | | OF EACH ALGAE PARTICLE |
497 ! | V_X_0,V_Y_0, | -->| BODY VELOCITIES AT THE POSITION OF EACH |
498 ! | V_Z_0 | | ALGAE PARTICLE ONE TIME STEP BEFORE |
499 ! | | | THE CALCULATIONS |
500 ! | V_X,V_Y,V_Z |<-- | BODY VELOCITIES AT THE POSITION OF EACH |
501 ! | | | ALGAE PARTICLE |
502 ! | X_A,Y_A,Z_A |<-->| POSITION OF THE ALGAE PARTICLES BEFORE AND |
503 ! | | | AFTER DISPLACEMENT |
504 ! | DX_A,DY_A,DZ_A |<-- | DISPLACEMENT OF EACH ALGAE PARTICLE |
505 ! | ELEM_ALG |<-->| NUMBER OF THE ELEMENT CONTAINING THE ALGAE |
506 ! | | | PARTICLE |
507 ! | LT | -->| TIME ITERATION OF THE SIMULATION |
508 ! | DALGAE | -->| DIAMETER OF THE ALGAE PARTICLES |
509 ! | RALGAE | -->| DENSITY OF THE ALGAE PARTICLES |
510 ! | EALGAE | -->| THICKNESS OF THE ALGAE PARTICLES |
511 ! | TALGAE | -->| TIME AT WHICH ALGAE PARTICLES ARE RELEASED |
512 ! | YALGAE | -->| ALGAE TYPE OF THE PARTICLES |
513 ! | REL_ALGAE | -->| TYPE OF ALGAE RELEASE |
514 ! |________________|____|______________________________________________|
515 ! MODE : -->(NON MODIFIED DATA), <--(RESULT), <-->(MODIFIED DATA)
516 !
517 !-----------------------------------------------------------------------
518 !
519 ! CALLED BY : DERIVE
520 !
521 ! SUBROUTINE CALLED : NONE
522 !
523 !***********************************************************************
524 !
526  IMPLICIT NONE
527 !
528 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
529 !
530 ! PARAMETRES
531  DOUBLE PRECISION :: PI
532  DOUBLE PRECISION :: E
533  DOUBLE PRECISION,PARAMETER :: C0=2.1d0
534  DOUBLE PRECISION,PARAMETER :: RHO_F=1000.d0
535  DOUBLE PRECISION,PARAMETER :: NU=0.000001d0
536 ! VARIABLES DEPENDENT ON THE ALGAE SIMULATIONS
537  INTEGER ,INTENT(IN) :: NA_TOT
538  INTEGER ,INTENT(IN) :: NA
539  DOUBLE PRECISION,INTENT(IN) :: DT,AT
540  INTEGER :: I_A
541  INTEGER ,INTENT(IN) :: LT
542  DOUBLE PRECISION,INTENT(IN) :: DALGAE(*)
543  DOUBLE PRECISION,INTENT(IN) :: RALGAE(*)
544  DOUBLE PRECISION,INTENT(IN) :: EALGAE(*)
545  DOUBLE PRECISION,INTENT(IN) :: TALGAE(*)
546  INTEGER ,INTENT(IN) :: YALGAE(*)
547  INTEGER ,INTENT(IN) :: REL_ALGAE(*)
548 ! CONSTANTS OF THE BODIES
549  DOUBLE PRECISION :: S
550  DOUBLE PRECISION :: OMEGA
551  DOUBLE PRECISION :: M
552  DOUBLE PRECISION :: MASS
553 ! TEMPORARY VARIABLES TO CALCULATE VARIABLES FOR EACH DIRECTION
554  INTEGER ,INTENT(IN) :: NDIM
555  INTEGER :: I_DIM
556 ! PROPERTIES OF THE BODIES
557  DOUBLE PRECISION :: F_A
558  DOUBLE PRECISION :: F_B
559  DOUBLE PRECISION :: TAU_PART
560  DOUBLE PRECISION :: FI_C
561  DOUBLE PRECISION :: D_ALG,R_ALG,E_ALG,T_ALG
562  INTEGER :: Y_ALG,REL_ALG
563 ! PROPERTIES OF THE FLOW
564  DOUBLE PRECISION :: T_I
565  DOUBLE PRECISION :: B_I
566  DOUBLE PRECISION :: NORME_U0_V0
567 ! MEAN FLUID VARIABLES
568  DOUBLE PRECISION,INTENT(IN) :: U_X_AV_0(na_tot)
569  DOUBLE PRECISION,INTENT(IN) :: U_Y_AV_0(na_tot)
570  DOUBLE PRECISION,INTENT(IN) :: U_Z_AV_0(na_tot)
571  DOUBLE PRECISION,INTENT(IN) :: U_X_AV(na_tot)
572  DOUBLE PRECISION,INTENT(IN) :: U_Y_AV(na_tot)
573  DOUBLE PRECISION,INTENT(IN) :: U_Z_AV(na_tot)
574  DOUBLE PRECISION,INTENT(IN) :: K_AV_0(na_tot)
575  DOUBLE PRECISION,INTENT(IN) :: EPS_AV_0(na_tot)
576  DOUBLE PRECISION,INTENT(IN) :: H_FLU(na_tot)
577 ! VARIABLES OF THE BODIES
578  DOUBLE PRECISION,INTENT(IN) :: U_X_0(na_tot)
579  DOUBLE PRECISION,INTENT(IN) :: U_Y_0(na_tot)
580  DOUBLE PRECISION,INTENT(IN) :: U_Z_0(na_tot)
581  DOUBLE PRECISION,INTENT(OUT) :: U_X(na_tot)
582  DOUBLE PRECISION,INTENT(OUT) :: U_Y(na_tot)
583  DOUBLE PRECISION,INTENT(OUT) :: U_Z(na_tot)
584  DOUBLE PRECISION,INTENT(IN) :: V_X_0(na_tot)
585  DOUBLE PRECISION,INTENT(IN) :: V_Y_0(na_tot)
586  DOUBLE PRECISION,INTENT(IN) :: V_Z_0(na_tot)
587  DOUBLE PRECISION,INTENT(OUT) :: V_X(na_tot)
588  DOUBLE PRECISION,INTENT(OUT) :: V_Y(na_tot)
589  DOUBLE PRECISION,INTENT(OUT) :: V_Z(na_tot)
590  DOUBLE PRECISION,INTENT(INOUT) :: X_A(na_tot)
591  DOUBLE PRECISION,INTENT(INOUT) :: Y_A(na_tot)
592  DOUBLE PRECISION,INTENT(INOUT) :: Z_A(na_tot)
593  DOUBLE PRECISION,INTENT(OUT) :: DX_A(na_tot)
594  DOUBLE PRECISION,INTENT(OUT) :: DY_A(na_tot)
595  DOUBLE PRECISION,INTENT(OUT) :: DZ_A(na_tot)
596  INTEGER ,INTENT(IN) :: ELEM_ALG(na_tot)
597 ! RANDOM NUMBERS
598  DOUBLE PRECISION :: RAND1
599  DOUBLE PRECISION :: XI_G_I
600  DOUBLE PRECISION :: RAND2
601  DOUBLE PRECISION :: XI_CAPG_I
602  DOUBLE PRECISION :: RAND3
603  DOUBLE PRECISION :: XI_CAPP_I
604 ! VARIABLES USED TO FIND THE DRAG COEFFICIENT
605  DOUBLE PRECISION :: RE
606  DOUBLE PRECISION :: CD
607  DOUBLE PRECISION :: PHI_1
608  DOUBLE PRECISION :: PHI_2
609  DOUBLE PRECISION :: PHI_3
610  DOUBLE PRECISION :: PHI_4
611 ! VARIABLES USED TO CALCULATE THE STOCHASTIC INTEGRALS
612  DOUBLE PRECISION :: GAMMA_I
613  DOUBLE PRECISION :: CAPGAMMA_I
614  DOUBLE PRECISION :: CAPPHI_I
615  DOUBLE PRECISION :: COV_G_I2
616  DOUBLE PRECISION :: COV_CAPG_I2
617  DOUBLE PRECISION :: COV_CAPP_I2
618  DOUBLE PRECISION :: COV_G_ICAPG_I
619  DOUBLE PRECISION :: COV_G_ICAPP_I
620  DOUBLE PRECISION :: COV_CAPG_ICAPP_I
621  DOUBLE PRECISION :: L11
622  DOUBLE PRECISION :: L21
623  DOUBLE PRECISION :: L22
624  DOUBLE PRECISION :: L31
625  DOUBLE PRECISION :: L32
626  DOUBLE PRECISION :: L33
627 ! VARIABLES USED FOR THE EXACT INTEGRATOR
628  DOUBLE PRECISION :: ALPHA
629  DOUBLE PRECISION :: BETA
630  DOUBLE PRECISION :: C_CHECK
631  DOUBLE PRECISION :: K_CHECK
632  DOUBLE PRECISION :: Q_CHECK
633  DOUBLE PRECISION :: G_CHECK
634 !
635 !-----------------------------------------------------------------------
636 !
637  pi = 4.d0 * atan( 1.d0 )
638  e = exp( 1.d0 )
639 !
640 !-----------------------------------------------------------------------
641 !
642 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
643 !
644 ! C
645 ! C FICHIER TXT AVEC LE JOURNAL DES ERREURS
646 ! ! WRITE(LOG_NAME,'(A,I1,A)')'../erreur_log',RANG,'.txt'
647 ! ! OPEN(9999,FILE=LOG_NAME)
648 ! ! OPEN(9999,FILE='../erreur_log.txt')
649 ! !
650 ! ! WRITE(9999,*)LT
651 ! ! WRITE(9999,*)PSI(1,1,:)
652 
653 !=======================================================================
654 ! PREAMBLE OF THE CALCULATIONS
655 !=======================================================================
656 ! ALLOCATE VARIABLES
657  IF(.NOT.ALLOCATED(u_i_0_algae))ALLOCATE(u_i_0_algae(ndim))
658  IF(.NOT.ALLOCATED(u_i_algae))ALLOCATE(u_i_algae(ndim))
659  IF(.NOT.ALLOCATED(v_i_0_algae))ALLOCATE(v_i_0_algae(ndim))
660  IF(.NOT.ALLOCATED(v_i_algae))ALLOCATE(v_i_algae(ndim))
661  IF(.NOT.ALLOCATED(x_i_0_algae))ALLOCATE(x_i_0_algae(ndim))
662  IF(.NOT.ALLOCATED(x_i_algae))ALLOCATE(x_i_algae(ndim))
663  IF(.NOT.ALLOCATED(c_i_algae))ALLOCATE(c_i_algae(ndim))
664 !
665 !=======================================================================
666 ! START THE CALCULATIONS FOR EACH PARTICLE
667 !=======================================================================
668  DO i_a=1,na
669 !
670 ! SET PROPERTY FOR THAT CLASS
671  d_alg = dalgae(parclss%I(i_a))
672  r_alg = ralgae(parclss%I(i_a))
673  e_alg = ealgae(parclss%I(i_a))
674  t_alg = talgae(parclss%I(i_a))
675  y_alg = yalgae(parclss%I(i_a))
676  rel_alg = rel_algae(parclss%I(i_a))
677 ! CONSTANTS
678  IF( y_alg.EQ.1 )THEN !SPHERE
679  s = pi*d_alg**2/4.d0
680  omega = pi*d_alg**3/6.d0
681  m = 0.5d0*rho_f*omega
682  ELSEIF( y_alg.EQ.2 )THEN !IRIDAEA FLACCIDA (CLOSE TO ULVA)
683  s = pi*d_alg**2/4.d0
684  omega = s*e_alg
685  m = 3.57d0*rho_f*omega
686  ELSEIF( y_alg.EQ.3 )THEN !PELVETIOPSIS LIMITATA
687  s = pi*d_alg**2/4.d0
688  omega = s*e_alg
689  m = 4.64d0*rho_f*omega
690  ELSEIF( y_alg.EQ.4 )THEN !GIGARTINA LEPTORHYNCHOS
691  s = pi*d_alg**2/4.d0
692  omega = s*e_alg
693  m = 3.26d0*rho_f*omega
694  END IF
695  mass = r_alg*omega
696  cb = 6.d0*d_alg**2*rho_f*sqrt(pi*nu)
697 !
698 !=======================================================================
699 ! CHECK TO SEE IF THE TRANSPORT NEEDS TO BE CALCULATED
700 !=======================================================================
701  IF( elem_alg(i_a).LE.0 ) GOTO 12
702  IF( h_flu(i_a).LT.d_alg ) GOTO 12
703  IF(rel_alg.EQ.2) THEN
704  IF( dislodge%I(i_a).EQ.0 ) GOTO 12
705  ELSE
706  IF( at.LT.t_alg ) GOTO 12
707  ENDIF
708  ib = lt - int( t_alg/dt ) + 1
709 !
710 !=======================================================================
711 ! REDEFINE THE PREVIOUS VARIABLES
712 !=======================================================================
713  u_i_0_algae(1)=u_x_0(i_a)
714  u_i_0_algae(2)=u_y_0(i_a)
715  v_i_0_algae(1)=v_x_0(i_a)
716  v_i_0_algae(2)=v_y_0(i_a)
717  x_i_0_algae(1)=x_a(i_a)
718  x_i_0_algae(2)=y_a(i_a)
719  IF(ndim.EQ.3)THEN
720  u_i_0_algae(3)=u_z_0(i_a)
721  v_i_0_algae(3)=v_z_0(i_a)
722  x_i_0_algae(3)=z_a(i_a)
723  END IF
724 !=======================================================================
725 ! REDEFINE THE FLUID PROPERTIES
726 !=======================================================================
727  t_i=1.d0/(0.5d0+0.75d0*c0)*k_av_0(i_a)/eps_av_0(i_a)
728 ! IN C_I_ALGAE IT IS ASSUMED THAT
729 ! 1/RHO_F*dP/dX_i = (U_X_AV(I_A)-U_X_AV_0(I_A))/DT
730 ! => maybe use variation in surface elevation
731 ! ALONG X (I.E. HYDROSTATIC PRESSURE)
732  c_i_algae(1)=(u_x_av(i_a)-u_x_av_0(i_a))/dt
733  & +1.d0/t_i*u_x_av_0(i_a)
734  c_i_algae(2)=(u_y_av(i_a)-u_y_av_0(i_a))/dt
735  & +1.d0/t_i*u_y_av_0(i_a)
736  b_i=(c0*eps_av_0(i_a))**0.5
737  norme_u0_v0=sqrt((u_x_0(i_a)-v_x_0(i_a))**2+(u_y_0(i_a)
738  & -v_y_0(i_a))**2)
739  IF(ndim.EQ.3)THEN
740  c_i_algae(2)=(u_z_av(i_a)-u_z_av_0(i_a))/dt
741  & +1.d0/t_i*u_z_av_0(i_a)
742  norme_u0_v0=sqrt((u_x_0(i_a)-v_x_0(i_a))**2+(u_y_0(i_a)
743  & -v_y_0(i_a))**2+(u_z_0(i_a)-v_z_0(i_a))**2)
744  END IF
745 !=======================================================================
746  DO i_dim=1,ndim
747 !=======================================================================
748 !=======================================================================
749 ! REDEFINE THE BODY PROPERTIES
750 !=======================================================================
751  ci_bas=0.d0
752  f_tail=0.d0
753 !
754  IF(ib.LE.nwin)THEN
755  nb=ib
756 !
757  ci_bas=ci_bas+2.d0/3.d0*cb*psi(i_a,i_dim,nb)*sqrt(dt)
758  & *(3.d0*sqrt(REAL(nb))+2.d0*(REAL(nb)-1.D0)**(1.5D0)
759  & -2.d0*REAL(nb)**(1.5d0))
760  DO iwin=1,nb-1
761  ci_bas=ci_bas+4.d0/3.d0*cb*sqrt(dt)*psi(i_a,i_dim,iwin)
762  & *((REAL(iwin)-1.D0)**(1.5D0)-2.d0*REAL(IWIN)**(1.5D0)
763  & +(REAL(iwin)+1.D0)**(1.5D0))
764  END DO
765 !
767 !
768  f_a=(rho_f*omega+m+4.d0/3.d0*cb*sqrt(dt))/(mass+m+4.d0/3.d0
769  & *cb*sqrt(dt))
770 !
771  re=norme_u0_v0*d_alg/nu
772  IF(y_alg.EQ.1)THEN !SPHERE
773  IF(re.EQ.0.d0)THEN
774  cd=0.d0
775  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
776  & *sqrt(dt))*d_alg)
777  ELSEIF(re.LT.0.4)THEN
778  cd=24.d0/re
779  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
780  & *sqrt(dt))*d_alg)
781  ELSEIF(re.GT.1000000)THEN
782  cd=0.2
783  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0*cb
784  & *sqrt(dt)))
785  ELSE
786  phi_1=(24.d0*re**(-1))**10+(21.d0*re**(-0.67))**10
787  & +(4.d0*re**(-0.33))**10+0.4d0**10
788  phi_2=1.d0/((0.148d0*re**0.11)**(-10)+0.5d0**(-10))
789  phi_3=(1.57d0*10.d0**8*re**(-1.625))**10
790  phi_4=1.d0/((6.d0*10.d0**(-17)*re**2.63)**(-10)
791  & +0.2**(-10))
792  cd=(1.d0/((phi_1+phi_2)**(-1)+phi_3**(-1))+phi_4)**0.1
793  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0*cb
794  & *sqrt(dt)))
795  END IF
796  ELSEIF(y_alg.EQ.2)THEN !IRIDAEA FLACCIDA (CLOSE TO ULVA)
797  IF(re.GE.14073.d0)THEN
798  cd=exp(6.822121d0-0.800627d0*log(re))
799  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
800  & *cb*sqrt(dt)))
801  ELSE
802  IF(re.EQ.0.d0)THEN
803  cd=0.d0
804  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
805  & *sqrt(dt))*d_alg)
806  ELSEIF(re.LT.0.4)THEN
807  cd=24.d0/re
808  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
809  & *sqrt(dt))*d_alg)
810  ELSEIF(re.GT.1000000)THEN
811  cd=0.2
812  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
813  & *cb*sqrt(dt)))
814  ELSE
815  phi_1=(24.d0*re**(-1))**10+(21.d0*re**(-0.67))**10
816  & +(4.d0*re**(-0.33))**10+0.4d0**10
817  phi_2=1.d0/((0.148d0*re**0.11)**(-10)+0.5d0**(-10))
818  phi_3=(1.57d0*10.d0**8*re**(-1.625))**10
819  phi_4=1.d0/((6.d0*10.d0**(-17)*re**2.63)**(-10)
820  & +0.2**(-10))
821  cd=(1.d0/((phi_1+phi_2)**(-1)+phi_3**(-1))+phi_4)
822  & **0.1
823  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
824  & *cb*sqrt(dt)))
825  END IF
826  END IF
827  ELSEIF(y_alg.EQ.3)THEN !PELVETIOPSIS LIMITATA
828  IF(re.GE.28611.d0)THEN
829  cd=exp(8.214783d0-0.877036d0*log(re))
830  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
831  & *cb*sqrt(dt)))
832  ELSE
833  IF(re.EQ.0.d0)THEN
834  cd=0.d0
835  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
836  & *sqrt(dt))*d_alg)
837  ELSEIF(re.LT.0.4)THEN
838  cd=24.d0/re
839  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
840  & *sqrt(dt))*d_alg)
841  ELSEIF(re.GT.1000000)THEN
842  cd=0.2
843  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
844  & *cb*sqrt(dt)))
845  ELSE
846  phi_1=(24.d0*re**(-1))**10+(21.d0*re**(-0.67))**10
847  & +(4.d0*re**(-0.33))**10+0.4d0**10
848  phi_2=1.d0/((0.148d0*re**0.11)**(-10)+0.5d0**(-10))
849  phi_3=(1.57d0*10.d0**8*re**(-1.625))**10
850  phi_4=1.d0/((6.d0*10.d0**(-17)*re**2.63)**(-10)
851  & +0.2**(-10))
852  cd=(1.d0/((phi_1+phi_2)**(-1)+phi_3**(-1))+phi_4)
853  & **0.1
854  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
855  & *cb*sqrt(dt)))
856  END IF
857  END IF
858  ELSEIF(y_alg.EQ.4)THEN !GIGARTINA LEPTORHYNCHOS
859  IF(re.GE.17981.d0)THEN
860  cd=exp(6.773712d0-0.774252d0*log(re))
861  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
862  & *cb*sqrt(dt)))
863  ELSE
864  IF(re.EQ.0.d0)THEN
865  cd=0.d0
866  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
867  & *sqrt(dt))*d_alg)
868  ELSEIF(re.LT.0.4)THEN
869  cd=24.d0/re
870  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
871  & *sqrt(dt))*d_alg)
872  ELSEIF(re.GT.1000000)THEN
873  cd=0.2
874  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
875  & *cb*sqrt(dt)))
876  ELSE
877  phi_1=(24.d0*re**(-1))**10+(21.d0*re**(-0.67))**10
878  & +(4.d0*re**(-0.33))**10+0.4d0**10
879  phi_2=1.d0/((0.148d0*re**0.11)**(-10)+0.5d0**(-10))
880  phi_3=(1.57d0*10.d0**8*re**(-1.625))**10
881  phi_4=1.d0/((6.d0*10.d0**(-17)*re**2.63)**(-10)
882  & +0.2**(-10))
883  cd=(1.d0/((phi_1+phi_2)**(-1)+phi_3**(-1))+phi_4)
884  & **0.1
885  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
886  & *cb*sqrt(dt)))
887  END IF
888  END IF
889  END IF
890 !
891  tau_part=1.d0/f_b
892 !
893  fi_c=ci_bas/(mass+m+4.d0/3.d0*cb*sqrt(dt))
894  ELSE
895  nb=nwin
896 !
897  DO ip=1,np
898  phi_plus=(exp(dt/(2.d0*t_til_p(ip)*twin))-1.d0)/(dt
899  & /(2.d0*t_til_p(ip)*twin))
900  phi_moins=(exp(-dt/(2.d0*t_til_p(ip)*twin))-1.d0)/(-dt
901  & /(2.d0*t_til_p(ip)*twin))
902 !
903  fi_p(i_a,i_dim,ip)=2.d0*cb*sqrt(e*t_til_p(ip)*twin)
904  & *exp(-1.d0/(2.d0*t_til_p(ip)))*(psi(i_a,i_dim,nb)*(1.d0
905  & -phi_moins)+psi(i_a,i_dim,nb+1)*exp(-dt/(2.d0*t_til_p(ip)
906  & *twin))*(phi_plus-1))+exp(-dt/(2.d0*t_til_p(ip)*twin))
907  & *fi_p(i_a,i_dim,ip)
908 !
909  f_tail=f_tail+a_p(ip)*fi_p(i_a,i_dim,ip)
910  END DO
911 !
912  ci_bas=ci_bas+2.d0/3.d0*cb*psi(i_a,i_dim,nb)*sqrt(dt)
913  & *(3.d0*sqrt(REAL(nb))+2.d0*(REAL(nb)-1.D0)**(1.5D0)
914  & -2.d0*REAL(nb)**(1.5d0))
915  DO iwin=1,nb-1
916  ci_bas=ci_bas+4.d0/3.d0*cb*sqrt(dt)*psi(i_a,i_dim,iwin)
917  & *((REAL(iwin)-1.D0)**(1.5D0)-2.d0*REAL(IWIN)**(1.5D0)
918  & +(REAL(iwin)+1.D0)**(1.5D0))
919  END DO
921 !
922  f_a=(rho_f*omega+m+4.d0/3.d0*cb*sqrt(dt))/(mass+m+4.d0/3.d0
923  & *cb*sqrt(dt))
924 !
925  re=norme_u0_v0*d_alg/nu
926  IF(y_alg.EQ.1)THEN !SPHERE
927  IF(re.EQ.0.d0)THEN
928  cd=0.d0
929  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
930  & *sqrt(dt))*d_alg)
931  ELSEIF(re.LT.0.4)THEN
932  cd=24.d0/re
933  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
934  & *sqrt(dt))*d_alg)
935  ELSEIF(re.GT.1000000)THEN
936  cd=0.2
937  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0*cb
938  & *sqrt(dt)))
939  ELSE
940  phi_1=(24.d0*re**(-1))**10+(21.d0*re**(-0.67))**10
941  & +(4.d0*re**(-0.33))**10+0.4d0**10
942  phi_2=1.d0/((0.148d0*re**0.11)**(-10)+0.5d0**(-10))
943  phi_3=(1.57d0*10.d0**8*re**(-1.625))**10
944  phi_4=1.d0/((6.d0*10.d0**(-17)*re**2.63)**(-10)
945  & +0.2**(-10))
946  cd=(1.d0/((phi_1+phi_2)**(-1)+phi_3**(-1))+phi_4)**0.1
947  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0*cb
948  & *sqrt(dt)))
949  END IF
950  ELSEIF(y_alg.EQ.2)THEN !IRIDAEA FLACCIDA (CLOSE TO ULVA)
951  IF(re.GE.14073.d0)THEN
952  cd=exp(6.822121d0-0.800627d0*log(re))
953  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
954  & *cb*sqrt(dt)))
955  ELSE
956  IF(re.EQ.0.d0)THEN
957  cd=0.d0
958  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
959  & *sqrt(dt))*d_alg)
960  ELSEIF(re.LT.0.4)THEN
961  cd=24.d0/re
962  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
963  & *sqrt(dt))*d_alg)
964  ELSEIF(re.GT.1000000)THEN
965  cd=0.2
966  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
967  & *cb*sqrt(dt)))
968  ELSE
969  phi_1=(24.d0*re**(-1))**10+(21.d0*re**(-0.67))**10
970  & +(4.d0*re**(-0.33))**10+0.4d0**10
971  phi_2=1.d0/((0.148d0*re**0.11)**(-10)+0.5d0**(-10))
972  phi_3=(1.57d0*10.d0**8*re**(-1.625))**10
973  phi_4=1.d0/((6.d0*10.d0**(-17)*re**2.63)**(-10)
974  & +0.2**(-10))
975  cd=(1.d0/((phi_1+phi_2)**(-1)+phi_3**(-1))+phi_4)
976  & **0.1
977  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
978  & *cb*sqrt(dt)))
979  END IF
980  END IF
981  ELSEIF(y_alg.EQ.3)THEN !PELVETIOPSIS LIMITATA
982  IF(re.GE.28611.d0)THEN
983  cd=exp(8.214783d0-0.877036d0*log(re))
984  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
985  & *cb*sqrt(dt)))
986  ELSE
987  IF(re.EQ.0.d0)THEN
988  cd=0.d0
989  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
990  & *sqrt(dt))*d_alg)
991  ELSEIF(re.LT.0.4)THEN
992  cd=24.d0/re
993  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
994  & *sqrt(dt))*d_alg)
995  ELSEIF(re.GT.1000000)THEN
996  cd=0.2
997  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
998  & *cb*sqrt(dt)))
999  ELSE
1000  phi_1=(24.d0*re**(-1))**10+(21.d0*re**(-0.67))**10
1001  & +(4.d0*re**(-0.33))**10+0.4d0**10
1002  phi_2=1.d0/((0.148d0*re**0.11)**(-10)+0.5d0**(-10))
1003  phi_3=(1.57d0*10.d0**8*re**(-1.625))**10
1004  phi_4=1.d0/((6.d0*10.d0**(-17)*re**2.63)**(-10)
1005  & +0.2**(-10))
1006  cd=(1.d0/((phi_1+phi_2)**(-1)+phi_3**(-1))+phi_4)
1007  & **0.1
1008  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
1009  & *cb*sqrt(dt)))
1010  END IF
1011  END IF
1012  ELSEIF(y_alg.EQ.4)THEN !GIGARTINA LEPTORHYNCHOS
1013  IF(re.GE.17981.d0)THEN
1014  cd=exp(6.773712d0-0.774252d0*log(re))
1015  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
1016  & *cb*sqrt(dt)))
1017  ELSE
1018  IF(re.EQ.0.d0)THEN
1019  cd=0.d0
1020  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
1021  & *sqrt(dt))*d_alg)
1022  ELSEIF(re.LT.0.4)THEN
1023  cd=24.d0/re
1024  f_b=(rho_f*s*24.d0*nu)/(2.d0*(mass+m+4.d0/3.d0*cb
1025  & *sqrt(dt))*d_alg)
1026  ELSEIF(re.GT.1000000)THEN
1027  cd=0.2
1028  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
1029  & *cb*sqrt(dt)))
1030  ELSE
1031  phi_1=(24.d0*re**(-1))**10+(21.d0*re**(-0.67))**10
1032  & +(4.d0*re**(-0.33))**10+0.4d0**10
1033  phi_2=1.d0/((0.148d0*re**0.11)**(-10)+0.5d0**(-10))
1034  phi_3=(1.57d0*10.d0**8*re**(-1.625))**10
1035  phi_4=1.d0/((6.d0*10.d0**(-17)*re**2.63)**(-10)
1036  & +0.2**(-10))
1037  cd=(1.d0/((phi_1+phi_2)**(-1)+phi_3**(-1))+phi_4)
1038  & **0.1
1039  f_b=(rho_f*s*cd*norme_u0_v0)/(2.d0*(mass+m+4.d0/3.d0
1040  & *cb*sqrt(dt)))
1041  END IF
1042  END IF
1043  END IF
1044 !
1045  tau_part=1.d0/f_b
1046 !
1047  fi_c=ci_bas/(mass+m+4.d0/3.d0*cb*sqrt(dt))
1048 !
1049  END IF
1050 ! T_I SHOULD NEVER EQUAL TAU_PART, PEFORM A CHECK JUST IN CASE
1051  IF(t_i-tau_part.EQ.0)THEN
1052  WRITE(lu,*)''
1053  WRITE(lu,*)' **************'
1054  WRITE(lu,*)' *T_I=TAU_PART*'
1055  WRITE(lu,*)' **************'
1056  WRITE(lu,*)''
1057  CALL plante(1)
1058  stop
1059  END IF
1060 !=======================================================================
1061 ! RANDOM NUMBERS
1062 !=======================================================================
1063  CALL random_number(rand1)
1064  xi_g_i=(rand1*2.d0-1.d0)*(12.d0**0.5)/2.d0
1065  CALL random_number(rand2)
1066  xi_capg_i=(rand2*2.d0-1.d0)*(12.d0**0.5)/2.d0
1067  CALL random_number(rand3)
1068  xi_capp_i=(rand3*2.d0-1.d0)*(12.d0**0.5)/2.d0
1069 !=======================================================================
1070 ! FLUID VELOCITIES
1071 !=======================================================================
1072 ! VARIABLES OF THE EXACT INTEGRATOR
1073  alpha=exp(-dt/t_i)
1074 !
1075  cov_g_i2=(1.d0-alpha**2)*b_i**2*t_i/2.d0
1076 !
1077  l11=sqrt(cov_g_i2)
1078  gamma_i=l11*xi_g_i
1079 !FLUID VELOCITY
1080  u_i_algae(i_dim)=alpha*u_i_0_algae(i_dim)
1081  & +(1.d0-alpha)*c_i_algae(i_dim)*t_i
1082  & +gamma_i
1083 !
1084 !=======================================================================
1085 ! BODY VELOCITIES
1086 !=======================================================================
1087 ! VARIABLES OF THE EXACT INTEGRATOR
1088  beta=exp(-dt/tau_part)
1089  c_check=(t_i-f_a*tau_part)/(t_i-tau_part)
1090  k_check=f_a/c_check-1.d0
1091  q_check=k_check*t_i*tau_part/(t_i+tau_part)
1092 !
1093  cov_capg_i2=(b_i*c_check)**2*((1.d0-alpha**2)*t_i/2.d0+(1.d0
1094  & -beta**2)*k_check**2*tau_part/2.d0+2.d0*(1.d0-alpha*beta)
1095  & *q_check)
1096  cov_g_icapg_i=b_i**2*c_check*((1.d0-alpha**2)*t_i/2.d0
1097  & +(1.d0-alpha*beta)*q_check)
1098 !
1099  l21=cov_g_icapg_i/l11
1100 ! TO STOP ROUND OFF ERRORS CREATING NaN
1101  IF(cov_capg_i2.GE.l21**2)THEN
1102  l22=sqrt(cov_capg_i2-l21**2)
1103  ELSE
1104  l22=sqrt(l21**2-cov_capg_i2)
1105  END IF
1106  IF(l22.EQ.0.d0)THEN
1107  l22=1.d-12
1108  END IF
1109 !
1110  capgamma_i=l21*xi_g_i+l22*xi_capg_i
1111 ! BODY VELOCITY
1112  v_i_algae(i_dim)=beta*v_i_0_algae(i_dim)
1113  & +(1.d0-beta)*(c_i_algae(i_dim)*t_i+fi_c)
1114  & +(alpha-beta)*c_check*(u_i_0_algae(i_dim)
1115  & -c_i_algae(i_dim)*t_i)
1116  & +capgamma_i
1117 !
1118 !=======================================================================
1119 ! ALGAE POSITIONS
1120 !=======================================================================
1121 ! VARIABLES OF THE EXACT INTEGRATOR
1122  g_check=t_i+k_check*tau_part
1123 !
1124  cov_capp_i2=(b_i*c_check)**2*(g_check**2*dt+(1.d0-alpha**2)
1125  & *t_i**3/2.d0+(1.d0-beta**2)*k_check**2*tau_part**3/2.d0
1126  & -2.d0*g_check*((1.d0-alpha)*t_i**2+(1.d0-beta)*k_check
1127  & *tau_part**2)+2.d0*(1.d0-alpha*beta)*q_check*t_i*tau_part)
1128 !
1129  cov_g_icapp_i=b_i**2*c_check*((1.d0-alpha)*g_check*t_i-(1.d0
1130  & -alpha**2)*t_i**2/2.d0-(1.d0-alpha*beta)*q_check*tau_part)
1131 !
1132  cov_capg_icapp_i=(b_i*c_check)**2*(((1.d0-alpha)*t_i+(1.d0
1133  & -beta)*k_check*tau_part)*g_check-(1.d0-alpha**2)*t_i**2
1134  & /2.d0-(1.d0-beta**2)*k_check**2*tau_part**2/2.d0-(1.d0
1135  & -alpha*beta)*k_check*t_i*tau_part)
1136 !
1137  l31=cov_g_icapp_i/l11
1138  l32=(cov_capg_icapp_i-l21*l31)/l22
1139 ! TO STOP ROUND OFF ERRORS CREATING NaN
1140  IF(cov_capp_i2.GE.l31**2+l32**2)THEN
1141  l33=sqrt(cov_capp_i2-l31**2-l32**2)
1142  ELSE
1143  l33=sqrt(abs(cov_capp_i2-l31**2-l32**2))
1144  END IF
1145 !
1146  capphi_i=l31*xi_g_i+l32*xi_capg_i+l33*xi_capp_i
1147 !ALGAE POSITION
1148  x_i_algae(i_dim)=x_i_0_algae(i_dim)
1149  & +(1.d0-beta)*tau_part*v_i_0_algae(i_dim)+(dt
1150  & -(1.d0-beta)*tau_part)*(c_i_algae(i_dim)*t_i+fi_c*tau_part)
1151  & +c_check*(u_i_0_algae(i_dim)-c_i_algae(i_dim)*t_i)
1152  & *((1.d0-alpha)*t_i-(1.d0-beta)*tau_part)
1153  & +capphi_i
1154 !
1155 !=======================================================================
1156 ! CHECK FOR POSSIBLE ERRORS
1157 !=======================================================================
1158  IF(abs(x_i_algae(i_dim)).GT.10.d0**10)THEN
1159  WRITE(lu,*)''
1160  WRITE(lu,*)' **************'
1161  WRITE(lu,*)' *POSITION INF*'
1162  WRITE(lu,*)' **************'
1163  WRITE(lu,*)''
1164  CALL plante(1)
1165  stop
1166  END IF
1167 !
1168 !=======================================================================
1169 ! REDEFINE PSI
1170 !=======================================================================
1171  DO iwin=1,nwin
1172  psi(i_a,i_dim,nwin+1-iwin+1)=psi(i_a,i_dim,nwin+1-iwin)
1173  END DO
1174  psi(i_a,i_dim,1)=((u_i_algae(i_dim)-v_i_algae(i_dim))
1175  & -(u_i_0_algae(i_dim)-v_i_0_algae(i_dim)))/dt
1176 !=======================================================================
1177  END DO
1178 !=======================================================================
1179 !=======================================================================
1180 ! REDEFINIR THE CURRENT VARIABLES VARIABLES ACTUELLES
1181 !=======================================================================
1182  u_x(i_a)=u_i_algae(1)
1183  u_y(i_a)=u_i_algae(2)
1184  v_x(i_a)=v_i_algae(1)
1185  v_y(i_a)=v_i_algae(2)
1186  x_a(i_a)=x_i_algae(1)
1187  y_a(i_a)=x_i_algae(2)
1188 !
1189  dx_a(i_a)=x_i_algae(1)-x_i_0_algae(1)
1190  dy_a(i_a)=x_i_algae(2)-x_i_0_algae(2)
1191  IF(ndim.EQ.3)THEN
1192  z_a(i_a)=x_i_algae(3)
1193  dz_a(i_a)=x_i_algae(3)-x_i_0_algae(3)
1194  END IF
1195 
1196 !
1197  GOTO 13
1198 12 CONTINUE
1199 ! IF THE PARTICLES ARE NOT TRANSPORTED
1200  dx_a(i_a)=0.d0
1201  dy_a(i_a)=0.d0
1202  dz_a(i_a)=0.d0
1203  v_x(i_a)=0.d0
1204  v_y(i_a)=0.d0
1205  v_z(i_a)=0.d0
1206  u_x(i_a)=0.d0
1207  u_y(i_a)=0.d0
1208  u_z(i_a)=0.d0
1209 !
1210  DO i_dim=1,ndim
1211  DO iwin=1,nwin+1
1212  psi(i_a,i_dim,iwin)=0.d0
1213  END DO
1214  END DO
1215 !
1216 13 CONTINUE
1217  END DO
1218 !
1219  RETURN
1220  END SUBROUTINE disp_algae
1221 !
1222 ! **********************
1223  SUBROUTINE dealloc_algae
1224 ! **********************
1225 !
1226  &()
1227 !
1228 !***********************************************************************
1229 ! TELEMAC 2D VERSION 6.3 MAI 2013 ANTOINE JOLY
1230 ! EDF R&D antoine.joly@edf.fr
1231 !***********************************************************************
1232 !
1233 !brief DEALLOCATES THE VARIABLES ASSOCIATED TO THE ALGAE PARTICLES
1234 !
1235 !-----------------------------------------------------------------------
1236 ! ARGUMENTS
1237 ! .________________.____.______________________________________________.
1238 ! | NAME |MODE| ROLE |
1239 ! |________________|____|______________________________________________|
1240 ! |________________|____|______________________________________________|
1241 ! MODE : -->(NON MODIFIED DATA), <--(RESULT), <-->(MODIFIED DATA)
1242 !
1243 !-----------------------------------------------------------------------
1244 !
1245 !***********************************************************************
1246 !
1247  IF(ALLOCATED(t_til_p)) DEALLOCATE(t_til_p)
1248  IF(ALLOCATED(a_p)) DEALLOCATE(a_p)
1249  IF(ALLOCATED(psi)) DEALLOCATE(psi)
1250  IF(ALLOCATED(fi_p)) DEALLOCATE(fi_p)
1251  IF(ALLOCATED(u_i_0_algae)) DEALLOCATE(u_i_0_algae)
1252  IF(ALLOCATED(u_i_algae)) DEALLOCATE(u_i_algae)
1253  IF(ALLOCATED(v_i_0_algae)) DEALLOCATE(v_i_0_algae)
1254  IF(ALLOCATED(v_i_algae)) DEALLOCATE(v_i_algae)
1255  IF(ALLOCATED(x_i_0_algae)) DEALLOCATE(x_i_0_algae)
1256  IF(ALLOCATED(x_i_algae)) DEALLOCATE(x_i_algae)
1257  IF(ALLOCATED(c_i_algae)) DEALLOCATE(c_i_algae)
1258 !
1259  IF (ndrg_clss.GT.0) THEN
1260  CALL bief_deallobj(nodclss)
1261  CALL bief_deallobj(parclss)
1262  IF (nalg_clss.GT.0) THEN
1263  CALL bief_deallobj(u_x_av_0)
1264  CALL bief_deallobj(u_y_av_0)
1265  CALL bief_deallobj(u_z_av_0)
1266  CALL bief_deallobj(u_x_av)
1267  CALL bief_deallobj(u_y_av)
1268  CALL bief_deallobj(u_z_av)
1269  CALL bief_deallobj(k_av_0)
1270  CALL bief_deallobj(eps_av_0)
1271  CALL bief_deallobj(k_av)
1272  CALL bief_deallobj(eps_av)
1273  CALL bief_deallobj(h_flu)
1274  CALL bief_deallobj(u_x_0)
1275  CALL bief_deallobj(u_y_0)
1276  CALL bief_deallobj(u_z_0)
1277  CALL bief_deallobj(u_x)
1278  CALL bief_deallobj(u_y)
1279  CALL bief_deallobj(u_z)
1280  CALL bief_deallobj(v_x_0)
1281  CALL bief_deallobj(v_y_0)
1282  CALL bief_deallobj(v_z_0)
1283  CALL bief_deallobj(v_x)
1284  CALL bief_deallobj(v_y)
1285  CALL bief_deallobj(v_z)
1286  CALL bief_deallobj(dx_a)
1287  CALL bief_deallobj(dy_a)
1288  CALL bief_deallobj(dz_a)
1289  CALL bief_deallobj(teff)
1290  CALL bief_deallobj(i_a_gl)
1291  CALL bief_deallobj(dislodge)
1292  ENDIF
1293  ENDIF
1294 !
1295  RETURN
1296  END SUBROUTINE dealloc_algae
1297 !
1298  END MODULE algae_transp
subroutine, public alloc_algae(NP_TOT, MESH, DT)
Definition: algae_transp.f:96
double precision, dimension(:), allocatable a_p
Definition: algae_transp.f:67
type(bief_obj) dy_a
Definition: algae_transp.f:56
integer nalg_clss
A. JOLY 14/06/2013 V6P3 First version
Definition: algae_transp.f:25
subroutine, public organise_algs(NPARAM, NOMB)
Definition: streamline.f:475
type(bief_obj) dx_a
Definition: algae_transp.f:55
type(bief_obj) u_y_av
Definition: algae_transp.f:35
type(bief_obj) eps_av
Definition: algae_transp.f:40
integer, parameter max_nalg_clss
Definition: algae_transp.f:27
integer iwin
Definition: algae_transp.f:69
type(bief_obj) eps_av_0
Definition: algae_transp.f:38
type(bief_obj) u_x_0
Definition: algae_transp.f:43
integer ib
Definition: algae_transp.f:63
type(bief_obj) dislodge
Definition: algae_transp.f:60
type(bief_obj) u_y
Definition: algae_transp.f:47
double precision, dimension(:), allocatable u_i_0_algae
Definition: algae_transp.f:79
double precision, dimension(:), allocatable x_i_algae
Definition: algae_transp.f:84
subroutine bief_deallobj(OBJ)
Definition: bief_deallobj.f:7
subroutine, public interp_algae(NP, NP_TOT, SHP_P, SHZ_P, ELT_P, U_X_AV, U_Y_AV, U_Z_AV, K_AV, EPS_AV, H_FLU, NPOIN, IELM, NDP, NDP2, NPLAN, NELMAX, IKLE, W1, IELMU, NPOINU, UCONV, VCONV, WCONV, AK, EP, H)
Definition: algae_transp.f:320
subroutine bief_allvec(NAT, VEC, NOM, IELM, DIM2, STATUT, MESH)
Definition: bief_allvec.f:7
double precision twin
Definition: algae_transp.f:70
type(bief_obj) u_z_av
Definition: algae_transp.f:36
double precision, dimension(:,:,:), allocatable fi_p
Definition: algae_transp.f:75
subroutine, public bief_interp(U, UTILD, SHP, NDP, SHZ, ETA, SHF, FRE, ELT, NP, NPOIN2, NPLAN, IELM, IKLE, NELMAX, PERIO, YA4D)
Definition: streamline.f:7655
type(bief_obj) h_flu
Definition: algae_transp.f:41
type(bief_obj) v_z
Definition: algae_transp.f:54
integer ip
Definition: algae_transp.f:65
type(bief_obj) u_x
Definition: algae_transp.f:46
type(bief_obj) v_x
Definition: algae_transp.f:52
double precision phi_moins
Definition: algae_transp.f:73
type(bief_obj) u_z
Definition: algae_transp.f:48
type(bief_obj), target parclss
type(bief_obj) u_x_av_0
Definition: algae_transp.f:31
subroutine init_basset(N_A, NDIM, DT)
Definition: algae_transp.f:214
type(bief_obj) u_z_av_0
Definition: algae_transp.f:33
type(bief_obj) v_x_0
Definition: algae_transp.f:49
type(bief_obj) u_y_av_0
Definition: algae_transp.f:32
double precision, dimension(:), allocatable c_i_algae
Definition: algae_transp.f:85
double precision, dimension(:), allocatable t_til_p
Definition: algae_transp.f:66
type(bief_obj) u_y_0
Definition: algae_transp.f:44
double precision f_tail
Definition: algae_transp.f:76
type(bief_obj), target nodclss
double precision ci_bas
Definition: algae_transp.f:77
double precision, dimension(:), allocatable v_i_algae
Definition: algae_transp.f:82
type(bief_obj) u_z_0
Definition: algae_transp.f:45
type(bief_obj) teff
Definition: algae_transp.f:58
type(bief_obj) dz_a
Definition: algae_transp.f:57
double precision, dimension(:), allocatable v_i_0_algae
Definition: algae_transp.f:81
double precision cb
Definition: algae_transp.f:74
type(bief_obj) k_av_0
Definition: algae_transp.f:37
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
type(bief_obj) k_av
Definition: algae_transp.f:39
double precision, dimension(:), allocatable x_i_0_algae
Definition: algae_transp.f:83
subroutine, public dealloc_algae()
type(bief_obj) i_a_gl
Definition: algae_transp.f:59
integer nwin
Definition: algae_transp.f:68
integer nb
Definition: algae_transp.f:62
subroutine, public disp_algae(NA_TOT, NA, NDIM, DT, AT, U_X_AV_0, U_Y_AV_0, U_Z_AV_0, K_AV_0, EPS_AV_0, H_FLU, U_X_AV, U_Y_AV, U_Z_AV, U_X_0, U_Y_0, U_Z_0, V_X_0, V_Y_0, V_Z_0, DX_A, DY_A, DZ_A, ELEM_ALG, U_X, U_Y, U_Z, V_X, V_Y, V_Z, X_A, Y_A, Z_A, LT, DALGAE, RALGAE, EALGAE, TALGAE, YALGAE, REL_ALGAE)
Definition: algae_transp.f:450
double precision, dimension(:,:,:), allocatable psi
Definition: algae_transp.f:71
type(bief_obj) v_y_0
Definition: algae_transp.f:50
double precision phi_plus
Definition: algae_transp.f:72
type(bief_obj) u_x_av
Definition: algae_transp.f:34
double precision, dimension(:), allocatable u_i_algae
Definition: algae_transp.f:80
type(bief_obj) v_z_0
Definition: algae_transp.f:51
Definition: bief.f:3
type(bief_obj) v_y
Definition: algae_transp.f:53
integer np
Definition: algae_transp.f:64