1 | |
---|
2 | !> Provides a common location for several OASIS variables |
---|
3 | |
---|
4 | MODULE mod_oasis_data |
---|
5 | ! - - - - - - - - - - - - - - - - - - - - - - - - - - - |
---|
6 | ! |
---|
7 | ! |
---|
8 | USE mod_oasis_kinds |
---|
9 | |
---|
10 | IMPLICIT NONE |
---|
11 | |
---|
12 | public |
---|
13 | |
---|
14 | ! public prism_data_zero |
---|
15 | |
---|
16 | #include <mpif.h> |
---|
17 | |
---|
18 | ! GENERAL |
---|
19 | |
---|
20 | INTEGER(kind=ip_intwp_p) :: nulprt, nulprt1, nulet ! unit numbers for log files |
---|
21 | INTEGER(kind=ip_i4_p) :: OASIS_debug |
---|
22 | INTEGER(kind=ip_i4_p) :: TIMER_debug |
---|
23 | character(len=ic_med) :: cdf_filetype |
---|
24 | |
---|
25 | logical :: enddef_called ! true when enddef is called, for error checking |
---|
26 | logical :: ET_debug |
---|
27 | |
---|
28 | INTEGER(kind=ip_i4_p) :: size_namfld |
---|
29 | CHARACTER(len=ic_lvar), POINTER :: total_namsrcfld(:), total_namdstfld(:) |
---|
30 | |
---|
31 | ! Models |
---|
32 | |
---|
33 | ! These are identical on all MPI tasks |
---|
34 | INTEGER(kind=ip_i4_p),parameter :: prism_mmodels = 20 |
---|
35 | ! Prime number definition for MPI intercommunicator tag generation |
---|
36 | INTEGER(kind=ip_i4_p),parameter :: prime_nbs(prism_mmodels) = (/ 2, 3, 5, 7, 11, 13, 17, & |
---|
37 | & 19, 23, 29, 31, 37, 41, 43, & |
---|
38 | & 47, 53, 59, 61, 67, 71 /) |
---|
39 | INTEGER(kind=ip_i4_p) :: prism_nmodels ! number of models |
---|
40 | INTEGER(kind=ip_i4_p) :: prism_amodels ! number of active models |
---|
41 | character(len=ic_lvar) :: prism_modnam(prism_mmodels) ! model names |
---|
42 | logical :: prism_modcpl(prism_mmodels) ! model coupling flags |
---|
43 | |
---|
44 | ! These are task specific |
---|
45 | character(len=ic_lvar):: compnm ! name of model on TASK |
---|
46 | integer(kind=ip_i4_p) :: compid ! integer id associated with model on TASK |
---|
47 | logical :: oasis_coupled ! flag whether this TASK is coupled |
---|
48 | |
---|
49 | |
---|
50 | ! MPI |
---|
51 | |
---|
52 | INTEGER(kind=ip_i4_p) :: mpi_comm_global_world |
---|
53 | INTEGER(kind=ip_i4_p) :: mpi_rank_world |
---|
54 | INTEGER(kind=ip_i4_p) :: mpi_size_world |
---|
55 | INTEGER(kind=ip_i4_p) :: mpi_comm_global |
---|
56 | INTEGER(kind=ip_i4_p) :: mpi_rank_global |
---|
57 | INTEGER(kind=ip_i4_p) :: mpi_size_global |
---|
58 | INTEGER(kind=ip_i4_p) :: mpi_comm_local |
---|
59 | INTEGER(kind=ip_i4_p) :: mpi_rank_local |
---|
60 | INTEGER(kind=ip_i4_p) :: mpi_size_local |
---|
61 | INTEGER(kind=ip_i4_p) :: mpi_root_local |
---|
62 | INTEGER(kind=ip_i4_p) :: mpi_comm_map |
---|
63 | INTEGER(kind=ip_i4_p) :: mpi_rank_map |
---|
64 | INTEGER(kind=ip_i4_p) :: mpi_size_map |
---|
65 | INTEGER(kind=ip_i4_p) :: mpi_root_map |
---|
66 | LOGICAL :: mpi_in_map |
---|
67 | CHARACTER(len=MPI_MAX_PROCESSOR_NAME) :: mpi_node_name |
---|
68 | INTEGER(kind=ip_i4_p) :: mpi_err |
---|
69 | INTEGER(kind=ip_i4_p),allocatable :: mpi_root_global(:) ! for each model, the root rank in comm_world |
---|
70 | INTEGER(kind=ip_i4_p),allocatable :: mpi_comp_size(:) ! for each model, the size of the local comm |
---|
71 | character(len=ic_lvar),pointer :: compnmlist(:) |
---|
72 | |
---|
73 | ! PARAMETERS |
---|
74 | |
---|
75 | character(len=*) ,parameter :: cspval = "spval_undef" |
---|
76 | real(ip_double_p),parameter :: rspval = 1.0e36 |
---|
77 | integer(ip_i4_p) ,parameter :: ispval = -999999 |
---|
78 | |
---|
79 | real(ip_double_p),parameter :: prism_pi = 3.14159265358979323846 |
---|
80 | real(ip_double_p),parameter :: eradius = 6371229. ! meters |
---|
81 | |
---|
82 | !------------------------------------------------------------ |
---|
83 | CONTAINS |
---|
84 | !------------------------------------------------------------ |
---|
85 | |
---|
86 | !< Initialize the module data |
---|
87 | |
---|
88 | SUBROUTINE oasis_data_zero() |
---|
89 | |
---|
90 | IMPLICIT NONE |
---|
91 | |
---|
92 | character(len=*),parameter :: subname = '(oasis_data_zero)' |
---|
93 | |
---|
94 | nulprt = 6 |
---|
95 | nulprt1 = 6 |
---|
96 | nulet = 60 |
---|
97 | OASIS_debug = 0 |
---|
98 | TIMER_debug = 0 |
---|
99 | ET_debug = .FALSE. |
---|
100 | compid = -1 |
---|
101 | compnm = trim(cspval) |
---|
102 | oasis_coupled = .false. |
---|
103 | mpi_comm_global = -1 |
---|
104 | mpi_rank_global = -1 |
---|
105 | mpi_size_global = -1 |
---|
106 | mpi_comm_local = -1 |
---|
107 | mpi_rank_local = -1 |
---|
108 | mpi_size_local = -1 |
---|
109 | enddef_called = .false. |
---|
110 | |
---|
111 | END SUBROUTINE oasis_data_zero |
---|
112 | |
---|
113 | !------------------------------------------------------------ |
---|
114 | END MODULE mod_oasis_data |
---|
115 | |
---|
116 | |
---|