source: CONFIG/publications/ICOLMDZORINCA_CO2_Transport_GMD_2023/INCA/src/INCA_PARA/mod_inca_para.F90 @ 6610

Last change on this file since 6610 was 6610, checked in by acosce, 10 months ago

INCA used for ICOLMDZORINCA_CO2_Transport_GMD_2023

File size: 2.9 KB
Line 
1MODULE mod_inca_para
2
3  USE inca_data_para
4  USE mod_inca_transfert_para
5  USE PRINT_INCA
6  USE MOD_GRID_INCA
7
8  INTEGER,SAVE :: plon_loc
9  LOGICAL,SAVE :: is_sequential
10  LOGICAL,SAVE :: is_parallel
11 
12!$OMP THREADPRIVATE(plon_loc)
13 
14CONTAINS
15
16  SUBROUTINE Init_mod_inca_para(iim,jjp1,llm,nb_proc,distrib,COMM_LMDZ)
17    IMPLICIT NONE
18    INTEGER,INTENT(in) :: iim
19    INTEGER,INTENT(in) :: jjp1
20    INTEGER, INTENT(in) :: llm
21    INTEGER,INTENT(in) :: nb_proc
22    INTEGER,INTENT(in) :: distrib(0:nb_proc-1)
23    INTEGER,INTENT(IN) :: COMM_LMDZ
24
25
26#ifdef _OPENMP   
27    INTEGER :: OMP_GET_NUM_THREADS
28    EXTERNAL OMP_GET_NUM_THREADS
29    INTEGER :: OMP_GET_THREAD_NUM
30    EXTERNAL OMP_GET_THREAD_NUM
31#endif 
32
33    CALL Init_inca_mpi_data(iim,jjp1,nb_proc,distrib,COMM_LMDZ)
34
35!$OMP PARALLEL
36!$OMP BARRIER
37
38    CALL Init_inca_omp_data(plon_mpi)
39    plon_loc=plon_omp
40    nbp_loc=plon_omp
41
42    CALL INIT_PRINT_INCA()
43    CALL Test_transfert
44!$OMP END PARALLEL   
45    IF (is_ok_mpi .OR. is_ok_omp) THEN
46       is_sequential=.FALSE.
47       is_parallel=.TRUE.
48    ELSE
49       is_sequential=.TRUE.
50       is_parallel=.FALSE.
51    ENDIF
52
53
54    CALL Init_grid_inca(iim,jjp1,llm)
55
56   
57  END SUBROUTINE Init_mod_inca_para
58
59  SUBROUTINE Test_transfert
60    USE mod_grid_inca
61    IMPLICIT NONE
62 
63    REAL :: Test_Field1d_glo(plon_glo,nbp_lev)
64    REAL :: tmp1d_glo(plon_glo,nbp_lev)
65    REAL :: Test_Field2d_glo(nbp_lon,nbp_lat,nbp_lev)
66    REAL :: tmp2d_glo(nbp_lon,nbp_lat,nbp_lev)
67    REAL :: Test_Field1d_loc(plon_loc,nbp_lev)
68    REAL :: Test_Field2d_loc(nbp_lon,jj_nb,nbp_lev)
69    REAL :: CheckSum
70   
71    INTEGER :: i,l
72 
73    Test_Field1d_glo = 0.
74    Test_Field2d_glo = 0.
75    Test_Field1d_loc = 0.
76    Test_Field2d_loc = 0.
77 
78    IF (is_mpi_root) THEN
79!$OMP MASTER
80      DO l=1,nbp_lev
81        DO i=1,plon_glo
82           Test_Field1d_glo(i,l)=1
83        ENDDO
84      ENDDO
85!$OMP END MASTER 
86    ENDIF
87 
88    CALL Scatter(Test_Field1d_glo,Test_Field1d_loc)
89    CALL Gather(Test_Field1d_loc,tmp1d_glo)
90 
91    IF (is_mpi_root) THEN
92!$OMP MASTER 
93      Checksum=sum(Test_Field1d_glo-tmp1d_glo)
94      WRITE(lunout, *) "------> Checksum =",Checksum," MUST BE 0"
95!$OMP END MASTER
96    ENDIF
97   
98    CALL grid1dTo2d_glo(Test_Field1d_glo,Test_Field2d_glo)
99    CALL scatter2D(Test_Field2d_glo,Test_Field1d_loc)
100    CALL gather2d(Test_Field1d_loc,Test_Field2d_glo)
101    CALL grid2dTo1d_glo(Test_Field2d_glo,tmp1d_glo)
102
103    IF (is_mpi_root) THEN
104!$OMP MASTER 
105      Checksum=sum(Test_Field1d_glo-tmp1d_glo)
106      WRITE(lunout, *) "------> Checksum =",Checksum," MUST BE 0"
107!$OMP END MASTER
108    ENDIF
109
110    CALL bcast(Test_Field1d_glo)
111    CALL reduce_sum(Test_Field1d_glo,tmp1d_glo)
112
113    IF (is_mpi_root) THEN
114!$OMP MASTER 
115      Checksum=sum(Test_Field1d_glo*omp_size*mpi_size-tmp1d_glo)
116      WRITE(lunout, *) "------> Checksum =",Checksum," MUST BE 0"
117!$OMP END MASTER
118    ENDIF
119   
120     
121   END SUBROUTINE Test_transfert
122 
123END MODULE mod_inca_para
124   
Note: See TracBrowser for help on using the repository browser.