The TELEMAC-MASCARET system  trunk
declarations_parallel.F
Go to the documentation of this file.
1 ! ****************************
3 ! ****************************
4 !
5 !***********************************************************************
6 ! PARALLEL VERSION V7P3
7 !***********************************************************************
8 !
9 !brief Creating a declaration wrapper for some of the MPI keywords
10 !+ that are used in other declarations.
11 !+ The variables defined in the MPI module / include are also
12 !+ declared with dummy values when used in scalar mode.
13 !
14 !history JAN RIEHME (ADJOINTWARE)
15 !+
16 !+ V7P3
17 !+ Allowing for a switch from the include 'mpif.h'
18 !+ to the 'USE MPI' module.
19 !
20 !history S.E. BOURBAN (HRW)
21 !+ 17/03/2017
22 !+ V7P3
23 !+ Further simplifying the switch with USE MPI and debugging the
24 !+ use in scalar mode.
25 !
26 !warning JAN RIEHME (ADJOINTWARE )
27 !+ For a system-wide installed OpenMPI the parameter MPI_ADDRESS_KIND
28 !+ has a compiler dependent value (for instance, gfortran :8).
29 !+ This value might not be invalid for others, so it is no good idea
30 !+ to use any sort of kind parameters exported by MPI, if a
31 !+ compiler independent MPI installation should be used.
32 !+ Solution: Define your own constants ... MY_ADDRESS_KIND
33 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
34 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35 !
36 !
37 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
38 !
39 #if defined HAVE_MPI
40 !
41 # if defined HAVE_MPI_MOD
42  USE mpi
43  IMPLICIT NONE
44  INTEGER, PARAMETER :: my_address_kind = mpi_address_kind
45 # else
46  IMPLICIT NONE
47  include 'mpif.h'
48 ! DEFINE 4-BYTE INTEGER KIND (PORTABLE) FOR MPI ADDRESSES
49  INTEGER, PARAMETER :: my_address_kind = selected_int_kind(16)
50 # endif
51 !
52  INTEGER wait_req_paraco(mpi_status_size,100)
53  INTEGER :: comm = mpi_comm_world
54  CHARACTER(LEN=MPI_MAX_ERROR_STRING):: mpi_error_msg
55  INTEGER mpi_error_len
56 #else
57  IMPLICIT NONE
58  INTEGER, PARAMETER :: my_address_kind = selected_int_kind(16)
59  INTEGER, PARAMETER :: mpi_integer = 0
60  INTEGER, PARAMETER :: mpi_double_precision = 0
61  INTEGER, PARAMETER :: mpi_ub = 0
62  INTEGER, PARAMETER :: mpi_comm_world = -1
63  INTEGER, PARAMETER :: mpi_success =0
64  INTEGER :: comm=0
65 !
66 ! Define AMPI_TYPE parameter for non-MPI compilation,
67 ! only required for oil_org_charac_type.F (there is
68 ! a #ifdef HAVE_MPI missing ...)
69 # ifdef COMPAD
70  INTEGER, PARAMETER :: ampi_type = -333
71 # endif
72 #endif
73 !
74 !------------------------------------------------------------------------
75 !
77  sequence ! BUT SEEMS USELESS (HENCE TRICK BELOW WITH VOID)
78  INTEGER :: mypid ! PARTITION OF THE TRACEBACK ORIGIN (HEAD)
79  INTEGER :: nepid ! THE NEIGHBOUR PARTITION THE TRACEBACK ENTERS TO
80  INTEGER :: ine ! THE LOCAL 2D ELEMENT NR THE TRACEBACK ENTERS IN THE NEIGBOUR PARTITION
81  INTEGER :: kne ! THE LOCAL LEVEL THE TRACEBACK ENTERS IN THE NEIGBOUR PARTITION
82  INTEGER :: ior ! THE POSITION OF THE TRAJECTORY -HEAD- IN MYPID [THE 2D/3D NODE OF ORIGIN]
83  INTEGER :: isp ! CURRENT RUNGE-KUTTA STEPS PASSED AS COLLECTED
84  INTEGER :: nsp ! TOTAL RUNGE-KUTTA STEPS
85  INTEGER :: ifr ! TRICK FOR ALIGNMENT
86  DOUBLE PRECISION :: xp,yp,zp,fp ! THE (X,Y,Z)-POSITION NOW
87  DOUBLE PRECISION :: dx,dy,dz,df ! THE DISPLACEMENTS
88  DOUBLE PRECISION :: basket(10) ! VARIABLES INTERPOLATED AT THE FOOT
89  END TYPE charac_type
90 !
91 !------------------------------------------------------------------------
92 !
93  TYPE alg_type
94  sequence ! NECESSARY TO DEFINE MPI TYPE ALG_CHAR
95  INTEGER :: mypid ! PARTITION OF THE TRACEBACK ORIGIN (HEAD)
96  INTEGER :: nepid ! THE NEIGHBOUR PARTITION THE TRACEBACK ENTERS TO
97  INTEGER :: iglob ! THE GLOBAL NUMBER OF THE PARTICLES
98  INTEGER :: flag ! USED TO ALIGN FIELDS
99  INTEGER :: iclass ! THE ALGAE CLASS
100  INTEGER :: dislodge ! 0 : NOT DISLODGED. 1 : DISLODGED.
101  DOUBLE PRECISION :: vx,vy,vz ! THE (X,Y,Z) PARTICLE VELOCITY
102  DOUBLE PRECISION :: ux,uy,uz ! THE (X,Y,Z) FLUID VELOCITY
103  DOUBLE PRECISION :: ux_av,uy_av,uz_av ! THE (X,Y,Z) AVERAGE FLUID VELOCITY
104  DOUBLE PRECISION :: k_av,eps_av ! THE VALUES OF K AND EPS
105  DOUBLE PRECISION :: h_flu ! THE WATER DEPTH AT POSITION OF VELOCITY
106  DOUBLE PRECISION :: teff ! EFFECTIVE TIME OF ALGAE DEGRADATION
107  DOUBLE PRECISION :: psi(3*101) ! VARIABLE PSI USED FOR THE BASSET FORCE
108  END TYPE alg_type
109 !
110 !------------------------------------------------------------------------
111 !
112  TYPE oil_type
113  sequence
114  INTEGER :: mypid ! PARTITION OF THE TRACEBACK ORIGIN (HEAD)
115  INTEGER :: nepid ! THE NEIGHBOUR PARTITION THE TRACEBACK ENTERS TO
116  INTEGER :: ine ! THE LOCAL 2D ELEMENT NR THE TRACEBACK ENTERS IN THE NEIGBOUR PARTITION
117  INTEGER :: kne ! THE LOCAL LEVEL THE TRACEBACK ENTERS IN THE NEIGBOUR PARTITION
118  INTEGER :: ior ! THE POSITION OF THE TRAJECTORY -HEAD- IN MYPID [THE 2D/3D NODE OF ORIGIN]
119  INTEGER :: state ! CURRENT RUNGE-KUTTA STEPS PASSED AS COLLECTED
120  INTEGER :: tpsech ! TOTAL RUNGE-KUTTA STEPS
121  INTEGER :: ifr ! FREQUENCY
122  DOUBLE PRECISION :: surface
123  DOUBLE PRECISION :: mass0
124  DOUBLE PRECISION :: mass
125  DOUBLE PRECISION :: mass_evap
126  DOUBLE PRECISION :: mass_diss
127  DOUBLE PRECISION :: mass_hap(10)
128  DOUBLE PRECISION :: mass_compo(10)
129  DOUBLE PRECISION :: tb_hap(10)
130  DOUBLE PRECISION :: tb_compo(10)
131  DOUBLE PRECISION :: sol_hap(10)
132  DOUBLE PRECISION :: sol_compo(10)
133  END TYPE oil_type
134 !
135 !=======================================================================
136 !
137  END MODULE
character(len=mpi_max_error_string) mpi_error_msg
integer, parameter mpi_double_precision
integer, parameter mpi_integer
integer, parameter mpi_success
integer, parameter mpi_ub
integer, parameter my_address_kind
integer, dimension(mpi_status_size, 100) wait_req_paraco
integer, parameter ampi_type
integer, parameter mpi_comm_world