154 #if defined( __PGI) || defined (__FLANG)
155 #define rank(X) size(shape(X))
159 #if defined(use_libMPI)
163 use iso_fortran_env,
only : input_unit, output_unit, error_unit
164 use mpp_parameter_mod,
only : mpp_verbose, mpp_debug, all_pes, any_pe, null_pe
165 use mpp_parameter_mod,
only : note, warning, fatal, mpp_clock_detailed,mpp_clock_sync
166 use mpp_parameter_mod,
only : clock_component, clock_subcomponent, clock_module_driver
167 use mpp_parameter_mod,
only : clock_module, clock_routine, clock_loop, clock_infra
168 use mpp_parameter_mod,
only : max_events, max_bins, max_event_types, max_clocks
169 use mpp_parameter_mod,
only : maxpes, event_wait, event_allreduce, event_broadcast
170 use mpp_parameter_mod,
only : event_alltoall
171 use mpp_parameter_mod,
only : event_type_create, event_type_free
172 use mpp_parameter_mod,
only : event_recv, event_send, mpp_ready, mpp_wait
173 use mpp_parameter_mod,
only : mpp_parameter_version=>version
174 use mpp_parameter_mod,
only : default_tag
175 use mpp_parameter_mod,
only : comm_tag_1, comm_tag_2, comm_tag_3, comm_tag_4
176 use mpp_parameter_mod,
only : comm_tag_5, comm_tag_6, comm_tag_7, comm_tag_8
177 use mpp_parameter_mod,
only : comm_tag_9, comm_tag_10, comm_tag_11, comm_tag_12
178 use mpp_parameter_mod,
only : comm_tag_13, comm_tag_14, comm_tag_15, comm_tag_16
179 use mpp_parameter_mod,
only : comm_tag_17, comm_tag_18, comm_tag_19, comm_tag_20
180 use mpp_parameter_mod,
only : mpp_fill_int,mpp_fill_double
181 use mpp_data_mod,
only : stat, mpp_stack, ptr_stack, status, ptr_status, sync, ptr_sync
182 use mpp_data_mod,
only : mpp_from_pe, ptr_from, remote_data_loc, ptr_remote
183 use mpp_data_mod,
only : mpp_data_version=>version
190 public :: mpp_verbose, mpp_debug, all_pes, any_pe, null_pe, note, warning, fatal
191 public :: mpp_clock_sync, mpp_clock_detailed, clock_component, clock_subcomponent
192 public :: clock_module_driver, clock_module, clock_routine, clock_loop, clock_infra
193 public :: maxpes, event_recv, event_send
194 public :: comm_tag_1, comm_tag_2, comm_tag_3, comm_tag_4
195 public :: comm_tag_5, comm_tag_6, comm_tag_7, comm_tag_8
196 public :: comm_tag_9, comm_tag_10, comm_tag_11, comm_tag_12
197 public :: comm_tag_13, comm_tag_14, comm_tag_15, comm_tag_16
198 public :: comm_tag_17, comm_tag_18, comm_tag_19, comm_tag_20
200 public :: mpp_init_test_full_init, mpp_init_test_init_true_only, mpp_init_test_peset_allocated
201 public :: mpp_init_test_clocks_init, mpp_init_test_datatype_list_init, mpp_init_test_logfile_init
202 public :: mpp_init_test_read_namelist, mpp_init_test_etc_unit, mpp_init_test_requests_allocated
212 public :: mpp_record_time_start, mpp_record_time_end
232 character(len=32) :: name
233 integer,
pointer :: list(:) =>null()
235 integer :: start, log2stride
243 character(len=16) :: name
244 integer(i8_kind),
dimension(MAX_EVENTS) :: ticks, bytes
252 character(len=32) :: name
253 integer(i8_kind) :: hits
254 integer(i8_kind) :: tick
255 integer(i8_kind) :: total_ticks
257 logical :: sync_on_begin, detailed
259 type(event),
pointer :: events(:) =>null()
268 character(len=16) :: name
269 real(r8_kind) :: msg_size_sums(MAX_BINS)
270 real(r8_kind) :: msg_time_sums(MAX_BINS)
271 real(r8_kind) :: total_data
272 real(r8_kind) :: total_time
273 integer(i8_kind) :: msg_size_cnts(MAX_BINS)
274 integer(i8_kind) :: total_cnts
281 character(len=16) :: name
282 type (Clock_Data_Summary) :: event(MAX_EVENT_TYPES)
291 integer,
allocatable :: sizes(:)
292 integer,
allocatable :: subsizes(:)
293 integer,
allocatable :: starts(:)
297 type(mpp_type),
pointer :: prev => null()
298 type(mpp_type),
pointer :: next => null()
305 type(mpp_type),
pointer :: head => null()
306 type(mpp_type),
pointer :: tail => null()
385 module procedure mpp_error_noargs
386 module procedure mpp_error_is
387 module procedure mpp_error_rs
388 module procedure mpp_error_ia
389 module procedure mpp_error_ra
390 module procedure mpp_error_ia_ia
391 module procedure mpp_error_ia_ra
392 module procedure mpp_error_ra_ia
393 module procedure mpp_error_ra_ra
394 module procedure mpp_error_ia_is
395 module procedure mpp_error_ia_rs
396 module procedure mpp_error_ra_is
397 module procedure mpp_error_ra_rs
398 module procedure mpp_error_is_ia
399 module procedure mpp_error_is_ra
400 module procedure mpp_error_rs_ia
401 module procedure mpp_error_rs_ra
402 module procedure mpp_error_is_is
403 module procedure mpp_error_is_rs
404 module procedure mpp_error_rs_is
405 module procedure mpp_error_rs_rs
412 module procedure iarray_to_char
413 module procedure rarray_to_char
511 module procedure mpp_type_create_int4
512 module procedure mpp_type_create_int8
513 module procedure mpp_type_create_real4
514 module procedure mpp_type_create_real8
515 module procedure mpp_type_create_cmplx4
516 module procedure mpp_type_create_cmplx8
517 module procedure mpp_type_create_logical4
518 module procedure mpp_type_create_logical8
539 module procedure mpp_max_real8_0d
540 module procedure mpp_max_real8_1d
541 module procedure mpp_max_int8_0d
542 module procedure mpp_max_int8_1d
543 module procedure mpp_max_real4_0d
544 module procedure mpp_max_real4_1d
545 module procedure mpp_max_int4_0d
546 module procedure mpp_max_int4_1d
561 module procedure mpp_min_real8_0d
562 module procedure mpp_min_real8_1d
563 module procedure mpp_min_int8_0d
564 module procedure mpp_min_int8_1d
565 module procedure mpp_min_real4_0d
566 module procedure mpp_min_real4_1d
567 module procedure mpp_min_int4_0d
568 module procedure mpp_min_int4_1d
598 module procedure mpp_sum_int8
599 module procedure mpp_sum_int8_scalar
600 module procedure mpp_sum_int8_2d
601 module procedure mpp_sum_int8_3d
602 module procedure mpp_sum_int8_4d
603 module procedure mpp_sum_int8_5d
604 module procedure mpp_sum_real8
605 module procedure mpp_sum_real8_scalar
606 module procedure mpp_sum_real8_2d
607 module procedure mpp_sum_real8_3d
608 module procedure mpp_sum_real8_4d
609 module procedure mpp_sum_real8_5d
611 module procedure mpp_sum_cmplx8
612 module procedure mpp_sum_cmplx8_scalar
613 module procedure mpp_sum_cmplx8_2d
614 module procedure mpp_sum_cmplx8_3d
615 module procedure mpp_sum_cmplx8_4d
616 module procedure mpp_sum_cmplx8_5d
618 module procedure mpp_sum_int4
619 module procedure mpp_sum_int4_scalar
620 module procedure mpp_sum_int4_2d
621 module procedure mpp_sum_int4_3d
622 module procedure mpp_sum_int4_4d
623 module procedure mpp_sum_int4_5d
624 module procedure mpp_sum_real4
625 module procedure mpp_sum_real4_scalar
626 module procedure mpp_sum_real4_2d
627 module procedure mpp_sum_real4_3d
628 module procedure mpp_sum_real4_4d
629 module procedure mpp_sum_real4_5d
631 module procedure mpp_sum_cmplx4
632 module procedure mpp_sum_cmplx4_scalar
633 module procedure mpp_sum_cmplx4_2d
634 module procedure mpp_sum_cmplx4_3d
635 module procedure mpp_sum_cmplx4_4d
636 module procedure mpp_sum_cmplx4_5d
643 module procedure mpp_sum_int8_ad
644 module procedure mpp_sum_int8_scalar_ad
645 module procedure mpp_sum_int8_2d_ad
646 module procedure mpp_sum_int8_3d_ad
647 module procedure mpp_sum_int8_4d_ad
648 module procedure mpp_sum_int8_5d_ad
649 module procedure mpp_sum_real8_ad
650 module procedure mpp_sum_real8_scalar_ad
651 module procedure mpp_sum_real8_2d_ad
652 module procedure mpp_sum_real8_3d_ad
653 module procedure mpp_sum_real8_4d_ad
654 module procedure mpp_sum_real8_5d_ad
656 module procedure mpp_sum_cmplx8_ad
657 module procedure mpp_sum_cmplx8_scalar_ad
658 module procedure mpp_sum_cmplx8_2d_ad
659 module procedure mpp_sum_cmplx8_3d_ad
660 module procedure mpp_sum_cmplx8_4d_ad
661 module procedure mpp_sum_cmplx8_5d_ad
663 module procedure mpp_sum_int4_ad
664 module procedure mpp_sum_int4_scalar_ad
665 module procedure mpp_sum_int4_2d_ad
666 module procedure mpp_sum_int4_3d_ad
667 module procedure mpp_sum_int4_4d_ad
668 module procedure mpp_sum_int4_5d_ad
669 module procedure mpp_sum_real4_ad
670 module procedure mpp_sum_real4_scalar_ad
671 module procedure mpp_sum_real4_2d_ad
672 module procedure mpp_sum_real4_3d_ad
673 module procedure mpp_sum_real4_4d_ad
674 module procedure mpp_sum_real4_5d_ad
676 module procedure mpp_sum_cmplx4_ad
677 module procedure mpp_sum_cmplx4_scalar_ad
678 module procedure mpp_sum_cmplx4_2d_ad
679 module procedure mpp_sum_cmplx4_3d_ad
680 module procedure mpp_sum_cmplx4_4d_ad
681 module procedure mpp_sum_cmplx4_5d_ad
699 module procedure mpp_gather_logical4
700 module procedure mpp_gatherv_logical4
701 module procedure mpp_gather_logical_1d
702 module procedure mpp_gather_int4
703 module procedure mpp_gather_int8
704 module procedure mpp_gatherv_int4
705 module procedure mpp_gatherv_int8
706 module procedure mpp_gather_int4_1d
707 module procedure mpp_gather_int8_1d
708 module procedure mpp_gather_real4
709 module procedure mpp_gather_real8
710 module procedure mpp_gatherv_real4
711 module procedure mpp_gatherv_real8
712 module procedure mpp_gather_real4_1d
713 module procedure mpp_gather_real8_1d
714 module procedure mpp_gather_logical_1dv
715 module procedure mpp_gather_int4_1dv
716 module procedure mpp_gather_int8_1dv
717 module procedure mpp_gather_real4_1dv
718 module procedure mpp_gather_real8_1dv
719 module procedure mpp_gather_pelist_logical_2d
720 module procedure mpp_gather_pelist_logical_3d
721 module procedure mpp_gather_pelist_int4_2d
722 module procedure mpp_gather_pelist_int4_3d
723 module procedure mpp_gather_pelist_int8_2d
724 module procedure mpp_gather_pelist_int8_3d
725 module procedure mpp_gather_pelist_real4_2d
726 module procedure mpp_gather_pelist_real4_3d
727 module procedure mpp_gather_pelist_real8_2d
728 module procedure mpp_gather_pelist_real8_3d
749 module procedure mpp_scatterv_int4
750 module procedure mpp_scatter_pelist_int4_2d
751 module procedure mpp_scatter_pelist_int4_3d
752 module procedure mpp_scatterv_int8
753 module procedure mpp_scatter_pelist_int8_2d
754 module procedure mpp_scatter_pelist_int8_3d
755 module procedure mpp_scatterv_real4
756 module procedure mpp_scatter_pelist_real4_2d
757 module procedure mpp_scatter_pelist_real4_3d
758 module procedure mpp_scatterv_real8
759 module procedure mpp_scatter_pelist_real8_2d
760 module procedure mpp_scatter_pelist_real8_3d
777 module procedure mpp_alltoall_int4
778 module procedure mpp_alltoall_int8
779 module procedure mpp_alltoall_real4
780 module procedure mpp_alltoall_real8
782 module procedure mpp_alltoall_cmplx4
785 module procedure mpp_alltoall_cmplx8
787 module procedure mpp_alltoall_logical4
788 module procedure mpp_alltoall_logical8
789 module procedure mpp_alltoall_int4_v
790 module procedure mpp_alltoall_int8_v
791 module procedure mpp_alltoall_real4_v
792 module procedure mpp_alltoall_real8_v
794 module procedure mpp_alltoall_cmplx4_v
797 module procedure mpp_alltoall_cmplx8_v
799 module procedure mpp_alltoall_logical4_v
800 module procedure mpp_alltoall_logical8_v
801 module procedure mpp_alltoall_int4_w
802 module procedure mpp_alltoall_int8_w
803 module procedure mpp_alltoall_real4_w
804 module procedure mpp_alltoall_real8_w
806 module procedure mpp_alltoall_cmplx4_w
809 module procedure mpp_alltoall_cmplx8_w
811 module procedure mpp_alltoall_logical4_w
812 module procedure mpp_alltoall_logical8_w
887 module procedure mpp_transmit_real8
888 module procedure mpp_transmit_real8_scalar
889 module procedure mpp_transmit_real8_2d
890 module procedure mpp_transmit_real8_3d
891 module procedure mpp_transmit_real8_4d
892 module procedure mpp_transmit_real8_5d
894 module procedure mpp_transmit_cmplx8
895 module procedure mpp_transmit_cmplx8_scalar
896 module procedure mpp_transmit_cmplx8_2d
897 module procedure mpp_transmit_cmplx8_3d
898 module procedure mpp_transmit_cmplx8_4d
899 module procedure mpp_transmit_cmplx8_5d
901 module procedure mpp_transmit_int8
902 module procedure mpp_transmit_int8_scalar
903 module procedure mpp_transmit_int8_2d
904 module procedure mpp_transmit_int8_3d
905 module procedure mpp_transmit_int8_4d
906 module procedure mpp_transmit_int8_5d
907 module procedure mpp_transmit_logical8
908 module procedure mpp_transmit_logical8_scalar
909 module procedure mpp_transmit_logical8_2d
910 module procedure mpp_transmit_logical8_3d
911 module procedure mpp_transmit_logical8_4d
912 module procedure mpp_transmit_logical8_5d
914 module procedure mpp_transmit_real4
915 module procedure mpp_transmit_real4_scalar
916 module procedure mpp_transmit_real4_2d
917 module procedure mpp_transmit_real4_3d
918 module procedure mpp_transmit_real4_4d
919 module procedure mpp_transmit_real4_5d
922 module procedure mpp_transmit_cmplx4
923 module procedure mpp_transmit_cmplx4_scalar
924 module procedure mpp_transmit_cmplx4_2d
925 module procedure mpp_transmit_cmplx4_3d
926 module procedure mpp_transmit_cmplx4_4d
927 module procedure mpp_transmit_cmplx4_5d
929 module procedure mpp_transmit_int4
930 module procedure mpp_transmit_int4_scalar
931 module procedure mpp_transmit_int4_2d
932 module procedure mpp_transmit_int4_3d
933 module procedure mpp_transmit_int4_4d
934 module procedure mpp_transmit_int4_5d
935 module procedure mpp_transmit_logical4
936 module procedure mpp_transmit_logical4_scalar
937 module procedure mpp_transmit_logical4_2d
938 module procedure mpp_transmit_logical4_3d
939 module procedure mpp_transmit_logical4_4d
940 module procedure mpp_transmit_logical4_5d
952 module procedure mpp_recv_real8
953 module procedure mpp_recv_real8_scalar
954 module procedure mpp_recv_real8_2d
955 module procedure mpp_recv_real8_3d
956 module procedure mpp_recv_real8_4d
957 module procedure mpp_recv_real8_5d
959 module procedure mpp_recv_cmplx8
960 module procedure mpp_recv_cmplx8_scalar
961 module procedure mpp_recv_cmplx8_2d
962 module procedure mpp_recv_cmplx8_3d
963 module procedure mpp_recv_cmplx8_4d
964 module procedure mpp_recv_cmplx8_5d
966 module procedure mpp_recv_int8
967 module procedure mpp_recv_int8_scalar
968 module procedure mpp_recv_int8_2d
969 module procedure mpp_recv_int8_3d
970 module procedure mpp_recv_int8_4d
971 module procedure mpp_recv_int8_5d
972 module procedure mpp_recv_logical8
973 module procedure mpp_recv_logical8_scalar
974 module procedure mpp_recv_logical8_2d
975 module procedure mpp_recv_logical8_3d
976 module procedure mpp_recv_logical8_4d
977 module procedure mpp_recv_logical8_5d
979 module procedure mpp_recv_real4
980 module procedure mpp_recv_real4_scalar
981 module procedure mpp_recv_real4_2d
982 module procedure mpp_recv_real4_3d
983 module procedure mpp_recv_real4_4d
984 module procedure mpp_recv_real4_5d
987 module procedure mpp_recv_cmplx4
988 module procedure mpp_recv_cmplx4_scalar
989 module procedure mpp_recv_cmplx4_2d
990 module procedure mpp_recv_cmplx4_3d
991 module procedure mpp_recv_cmplx4_4d
992 module procedure mpp_recv_cmplx4_5d
994 module procedure mpp_recv_int4
995 module procedure mpp_recv_int4_scalar
996 module procedure mpp_recv_int4_2d
997 module procedure mpp_recv_int4_3d
998 module procedure mpp_recv_int4_4d
999 module procedure mpp_recv_int4_5d
1000 module procedure mpp_recv_logical4
1001 module procedure mpp_recv_logical4_scalar
1002 module procedure mpp_recv_logical4_2d
1003 module procedure mpp_recv_logical4_3d
1004 module procedure mpp_recv_logical4_4d
1005 module procedure mpp_recv_logical4_5d
1019 module procedure mpp_send_real8
1020 module procedure mpp_send_real8_scalar
1021 module procedure mpp_send_real8_2d
1022 module procedure mpp_send_real8_3d
1023 module procedure mpp_send_real8_4d
1024 module procedure mpp_send_real8_5d
1026 module procedure mpp_send_cmplx8
1027 module procedure mpp_send_cmplx8_scalar
1028 module procedure mpp_send_cmplx8_2d
1029 module procedure mpp_send_cmplx8_3d
1030 module procedure mpp_send_cmplx8_4d
1031 module procedure mpp_send_cmplx8_5d
1033 module procedure mpp_send_int8
1034 module procedure mpp_send_int8_scalar
1035 module procedure mpp_send_int8_2d
1036 module procedure mpp_send_int8_3d
1037 module procedure mpp_send_int8_4d
1038 module procedure mpp_send_int8_5d
1039 module procedure mpp_send_logical8
1040 module procedure mpp_send_logical8_scalar
1041 module procedure mpp_send_logical8_2d
1042 module procedure mpp_send_logical8_3d
1043 module procedure mpp_send_logical8_4d
1044 module procedure mpp_send_logical8_5d
1046 module procedure mpp_send_real4
1047 module procedure mpp_send_real4_scalar
1048 module procedure mpp_send_real4_2d
1049 module procedure mpp_send_real4_3d
1050 module procedure mpp_send_real4_4d
1051 module procedure mpp_send_real4_5d
1054 module procedure mpp_send_cmplx4
1055 module procedure mpp_send_cmplx4_scalar
1056 module procedure mpp_send_cmplx4_2d
1057 module procedure mpp_send_cmplx4_3d
1058 module procedure mpp_send_cmplx4_4d
1059 module procedure mpp_send_cmplx4_5d
1061 module procedure mpp_send_int4
1062 module procedure mpp_send_int4_scalar
1063 module procedure mpp_send_int4_2d
1064 module procedure mpp_send_int4_3d
1065 module procedure mpp_send_int4_4d
1066 module procedure mpp_send_int4_5d
1067 module procedure mpp_send_logical4
1068 module procedure mpp_send_logical4_scalar
1069 module procedure mpp_send_logical4_2d
1070 module procedure mpp_send_logical4_3d
1071 module procedure mpp_send_logical4_4d
1072 module procedure mpp_send_logical4_5d
1107 module procedure mpp_broadcast_real8
1108 module procedure mpp_broadcast_real8_scalar
1109 module procedure mpp_broadcast_real8_2d
1110 module procedure mpp_broadcast_real8_3d
1111 module procedure mpp_broadcast_real8_4d
1112 module procedure mpp_broadcast_real8_5d
1114 module procedure mpp_broadcast_cmplx8
1115 module procedure mpp_broadcast_cmplx8_scalar
1116 module procedure mpp_broadcast_cmplx8_2d
1117 module procedure mpp_broadcast_cmplx8_3d
1118 module procedure mpp_broadcast_cmplx8_4d
1119 module procedure mpp_broadcast_cmplx8_5d
1121 module procedure mpp_broadcast_int8
1122 module procedure mpp_broadcast_int8_scalar
1123 module procedure mpp_broadcast_int8_2d
1124 module procedure mpp_broadcast_int8_3d
1125 module procedure mpp_broadcast_int8_4d
1126 module procedure mpp_broadcast_int8_5d
1127 module procedure mpp_broadcast_logical8
1128 module procedure mpp_broadcast_logical8_scalar
1129 module procedure mpp_broadcast_logical8_2d
1130 module procedure mpp_broadcast_logical8_3d
1131 module procedure mpp_broadcast_logical8_4d
1132 module procedure mpp_broadcast_logical8_5d
1134 module procedure mpp_broadcast_real4
1135 module procedure mpp_broadcast_real4_scalar
1136 module procedure mpp_broadcast_real4_2d
1137 module procedure mpp_broadcast_real4_3d
1138 module procedure mpp_broadcast_real4_4d
1139 module procedure mpp_broadcast_real4_5d
1142 module procedure mpp_broadcast_cmplx4
1143 module procedure mpp_broadcast_cmplx4_scalar
1144 module procedure mpp_broadcast_cmplx4_2d
1145 module procedure mpp_broadcast_cmplx4_3d
1146 module procedure mpp_broadcast_cmplx4_4d
1147 module procedure mpp_broadcast_cmplx4_5d
1149 module procedure mpp_broadcast_int4
1150 module procedure mpp_broadcast_int4_scalar
1151 module procedure mpp_broadcast_int4_2d
1152 module procedure mpp_broadcast_int4_3d
1153 module procedure mpp_broadcast_int4_4d
1154 module procedure mpp_broadcast_int4_5d
1155 module procedure mpp_broadcast_logical4
1156 module procedure mpp_broadcast_logical4_scalar
1157 module procedure mpp_broadcast_logical4_2d
1158 module procedure mpp_broadcast_logical4_3d
1159 module procedure mpp_broadcast_logical4_4d
1160 module procedure mpp_broadcast_logical4_5d
1215 module procedure mpp_chksum_i8_1d
1216 module procedure mpp_chksum_i8_2d
1217 module procedure mpp_chksum_i8_3d
1218 module procedure mpp_chksum_i8_4d
1219 module procedure mpp_chksum_i8_5d
1220 module procedure mpp_chksum_i8_1d_rmask
1221 module procedure mpp_chksum_i8_2d_rmask
1222 module procedure mpp_chksum_i8_3d_rmask
1223 module procedure mpp_chksum_i8_4d_rmask
1224 module procedure mpp_chksum_i8_5d_rmask
1226 module procedure mpp_chksum_i4_1d
1227 module procedure mpp_chksum_i4_2d
1228 module procedure mpp_chksum_i4_3d
1229 module procedure mpp_chksum_i4_4d
1230 module procedure mpp_chksum_i4_5d
1231 module procedure mpp_chksum_i4_1d_rmask
1232 module procedure mpp_chksum_i4_2d_rmask
1233 module procedure mpp_chksum_i4_3d_rmask
1234 module procedure mpp_chksum_i4_4d_rmask
1235 module procedure mpp_chksum_i4_5d_rmask
1237 module procedure mpp_chksum_r8_0d
1238 module procedure mpp_chksum_r8_1d
1239 module procedure mpp_chksum_r8_2d
1240 module procedure mpp_chksum_r8_3d
1241 module procedure mpp_chksum_r8_4d
1242 module procedure mpp_chksum_r8_5d
1244 module procedure mpp_chksum_r4_0d
1245 module procedure mpp_chksum_r4_1d
1246 module procedure mpp_chksum_r4_2d
1247 module procedure mpp_chksum_r4_3d
1248 module procedure mpp_chksum_r4_4d
1249 module procedure mpp_chksum_r4_5d
1251 module procedure mpp_chksum_c8_0d
1252 module procedure mpp_chksum_c8_1d
1253 module procedure mpp_chksum_c8_2d
1254 module procedure mpp_chksum_c8_3d
1255 module procedure mpp_chksum_c8_4d
1256 module procedure mpp_chksum_c8_5d
1259 module procedure mpp_chksum_c4_0d
1260 module procedure mpp_chksum_c4_1d
1261 module procedure mpp_chksum_c4_2d
1262 module procedure mpp_chksum_c4_3d
1263 module procedure mpp_chksum_c4_4d
1264 module procedure mpp_chksum_c4_5d
1275 integer,
parameter :: PESET_MAX = 10000
1276 integer :: current_peset_max = 32
1279 logical :: module_is_initialized = .false.
1280 logical :: debug = .false.
1281 integer :: npes=1, root_pe=0, pe=0
1282 integer(i8_kind) :: tick, ticks_per_sec, max_ticks, start_tick, end_tick, tick0=0
1283 integer :: mpp_comm_private
1284 logical :: first_call_system_clock_mpi=.true.
1287 logical :: mpp_record_timing_data=.true.
1288 type(
clock),
save :: clocks(max_clocks)
1289 integer :: log_unit, etc_unit
1291 character(len=32),
parameter :: configfile=
'logfile'
1293 integer :: peset_num=0, current_peset_num=0
1296 integer :: clock_num=0, num_clock_ids=0,current_clock=0, previous_clock(max_clocks)=0
1302 integer :: cur_send_request = 0
1303 integer :: cur_recv_request = 0
1304 integer,
allocatable :: request_send(:)
1305 integer,
allocatable :: request_recv(:)
1306 integer,
allocatable :: size_recv(:)
1307 integer,
allocatable :: type_recv(:)
1311 character(len=32) :: etcfile=
'._mpp.nonrootpe.msgs'
1313 character(len=32) :: etcfile=
'/dev/null'
1317 integer ::
in_unit=input_unit, out_unit=output_unit, err_unit=error_unit
1318 integer :: stdout_unit
1322 logical :: warnings_are_fatal = .false.
1323 integer :: error_state=0
1324 integer :: clock_grain=clock_loop-1
1328 integer :: mpp_stack_size=0, mpp_stack_hwm=0
1329 logical :: verbose=.false.
1334 integer,
parameter :: mpp_init_test_full_init = -1
1335 integer,
parameter :: mpp_init_test_init_true_only = 0
1336 integer,
parameter :: mpp_init_test_peset_allocated = 1
1337 integer,
parameter :: mpp_init_test_clocks_init = 2
1338 integer,
parameter :: mpp_init_test_datatype_list_init = 3
1339 integer,
parameter :: mpp_init_test_logfile_init = 4
1340 integer,
parameter :: mpp_init_test_read_namelist = 5
1341 integer,
parameter :: mpp_init_test_etc_unit = 6
1342 integer,
parameter :: mpp_init_test_requests_allocated = 7
1347 #if defined(use_libMPI)
1356 #if defined(use_libMPI)
1366 character(len=:),
dimension(:),
allocatable,
target,
public :: input_nml_file
1367 logical :: read_ascii_file_on = .false.
1371 #include<file_version.h>
1374 integer,
parameter :: max_request_min = 10000
1375 integer :: request_multiply = 20
1377 logical :: etc_unit_is_stderr = .false.
1378 integer :: max_request = 0
1379 logical :: sync_all_clocks = .false.
1380 namelist /mpp_nml/ etc_unit_is_stderr, request_multiply, mpp_record_timing_data, sync_all_clocks
1383 #include <system_clock.fh>
1384 #include <mpp_util.inc>
1385 #include <mpp_comm.inc>
subroutine mpp_sync_self(pelist, check, request, msg_size, msg_type)
This is to check if current PE's outstanding puts are complete but we can't use shmem_fence because w...
integer warn_unit
unit number of the warning log
subroutine mpp_error_basic(errortype, errormsg)
A very basic error handler uses ABORT and FLUSH calls, may need to use cpp to rename.
integer function stdout()
This function returns the current standard fortran unit numbers for output.
subroutine read_ascii_file(FILENAME, LENGTH, Content, PELIST)
Reads any ascii file into a character array and broadcasts it to the non-root mpi-tasks....
subroutine mpp_error_mesg(routine, errormsg, errortype)
overloads to mpp_error_basic, support for error_mesg routine in FMS
subroutine mpp_set_current_pelist(pelist, no_sync)
Set context pelist.
integer, parameter, public mpp_comm_null
MPP_COMM_NULL acts as an analagous mpp-macro for MPI_COMM_NULL to share with fms2_io NetCDF4 mpi-io....
subroutine mpp_init(flags, localcomm, test_level, alt_input_nml_path)
Initialize the mpp_mod module. Must be called before any usage.
integer get_len_nocomm
needed for mpp_transmit_nocomm.h
integer function stderr()
This function returns the current standard fortran unit numbers for error messages.
subroutine read_input_nml(pelist_name_in, alt_input_nml_path)
Reads an existing input nml file into a character array and broadcasts it to the non-root mpi-tasks....
character(len=32), parameter warnfile
base name for warninglog (appends ".<PE>.out")
type(communicator), dimension(:), allocatable peset
Will be allocated starting from 0, 0 is a dummy used to hold single-PE "self" communicator.
subroutine mpp_type_free(dtype)
Deallocates memory for mpp_type objects @TODO This should probably not take a pointer,...
integer, parameter, public mpp_info_null
MPP_INFO_NULL acts as an analagous mpp-macro for MPI_INFO_NULL to share with fms2_io NetCDF4 mpi-io....
integer clock0
measures total runtime from mpp_init to mpp_exit
subroutine mpp_clock_set_grain(grain)
Set the level of granularity of timing measurements.
real(r8_kind) mpi_tick_rate
clock rate for mpi_wtick()
subroutine mpp_declare_pelist(pelist, name, commID)
Declare a pelist.
integer world_peset_num
the world communicator
subroutine mpp_exit()
Finalizes process termination. To be called at the end of a run. Certain mpi implementations(openmpi)...
integer function stdlog()
This function returns the current standard fortran unit numbers for log messages. Log messages,...
integer in_unit
Use the intrinsics in iso_fortran_env.
integer function mpp_npes()
Returns processor count for current pelist.
subroutine mpp_set_stack_size(n)
Set the mpp_stack variable to be at least n LONG words long.
integer function, dimension(2) get_ascii_file_num_lines_and_length(FILENAME, PELIST)
Function to determine the maximum line length and number of lines from an ascii file.
real(r8_kind) mpi_count0
use to prevent integer overflow
integer function mpp_pe()
Returns processor ID.
subroutine mpp_sync(pelist, do_self)
Synchronize PEs in list.
integer function mpp_clock_id(name, flags, grain)
Return an ID for a new or existing clock.
integer function warnlog()
This function returns unit number for the warning log if on the root pe, otherwise returns the etc_un...
subroutine mpp_broadcast_char(char_data, length, from_pe, pelist)
Broadcasts a character string from the given pe to it's pelist.
integer function stdin()
This function returns the current standard fortran unit numbers for input.
Takes a given integer or real array and returns it as a string.
Scatter a vector across all PEs.
Perform parallel broadcasts.
Calculate parallel checksums.
Gather data sent from pelist onto the root pe Wrapper for MPI_gather, can be used with and without in...
Reduction operations. Find the max of scalar a from the PEs in pelist result is also automatically br...
Reduction operations. Find the min of scalar a from the PEs in pelist result is also automatically br...
Recieve data from another PE.
Scatter (ie - is) * (je - js) contiguous elements of array data from the designated root pe into cont...
Send data to a receiving PE.
Calculates sum of a given numerical array across pe's for adjoint domains.
Basic message-passing call.
Create a mpp_type variable.
a clock contains an array of event profiles for a region
Summary of information from a clock run.
Communication information for message passing libraries.
Communication event profile.
Data types for generalized data transfer (e.g. MPI_Type)
Persisent elements for linked list interaction.
holds name and clock data for use in mpp_util.h