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