source: codes/icosagcm/trunk/src/checksum.f90 @ 295

Last change on this file since 295 was 295, checked in by ymipsl, 10 years ago

Merging OpenMP parallisme mode : by subdomain and on vertical level.
This feature is actually experimental but may be retro-compatible with the last method based only on subdomain

YM

File size: 1.4 KB
Line 
1MODULE checksum_mod
2
3
4! simple function to perform checksum on T field
5! works only on 1 process
6! usefull to check openMP synchronisation problem
7! need to be enhanced...
8
9CONTAINS
10
11  SUBROUTINE checksum(field)
12  USE icosa
13  IMPLICIT NONE
14    TYPE(t_field), POINTER :: field(:)
15    INTEGER :: intval(2)
16    INTEGER :: ind,i,j,ij,l
17    INTEGER :: tot_sum
18       
19
20!$OMP BARRIER
21!$OMP MASTER
22    tot_sum=0
23    DO ind=1,ndomain
24      CALL swap_dimensions(ind)
25      CALL swap_geometry(ind)
26       
27      IF (field(ind)%ndim==2) THEN
28        DO j=jj_begin,jj_end
29           DO i=ii_begin,ii_end
30              ij=(j-1)*iim+i
31              IF (domain(ind)%own(i,j)) THEN
32                intval=transfer(field(ind)%rval2d(ij),intval,2) 
33                tot_sum=tot_sum+intval(1)+intval(2)
34              ENDIF
35           ENDDO
36        ENDDO
37   
38      ELSE IF (field(ind)%ndim==3) THEN
39       
40        DO l=1,size(field(ind)%rval3d,2)
41          DO j=jj_begin,jj_end
42             DO i=ii_begin,ii_end
43                ij=(j-1)*iim+i
44                IF (domain(ind)%own(i,j)) THEN
45                  intval=transfer(field(ind)%rval3d(ij,l),intval,2) 
46                  tot_sum=tot_sum+intval(1)+intval(2)
47                ENDIF
48             ENDDO
49          ENDDO
50        ENDDO
51     
52      ENDIF
53    ENDDO
54!$OMP END MASTER
55!$OMP BARRIER   
56   
57!$OMP MASTER
58    PRINT*,"CheckSum Field",field(1)%name,tot_sum
59!$OMP END MASTER
60 
61 
62 
63  END SUBROUTINE checksum
64 
65END MODULE checksum_mod
66 
Note: See TracBrowser for help on using the repository browser.