source: codes/icosagcm/trunk/src/dimensions.f90 @ 176

Last change on this file since 176 was 174, checked in by ymipsl, 11 years ago

Transform 2 loops on i and j in one loop ij for efficiency, vectorization and future GPU programing

YM

File size: 1.8 KB
Line 
1MODULE dimensions
2
3    INTEGER :: iim
4    INTEGER :: jjm
5    INTEGER :: ii_begin
6    INTEGER :: jj_begin
7    INTEGER :: ii_end
8    INTEGER :: jj_end
9    INTEGER :: ii_nb
10    INTEGER :: jj_nb
11    INTEGER :: ij_begin
12    INTEGER :: ij_end
13    INTEGER :: ij_begin_ext
14    INTEGER :: ij_end_ext
15       
16    INTEGER :: t_right
17    INTEGER :: t_rup
18    INTEGER :: t_lup
19    INTEGER :: t_left
20    INTEGER :: t_ldown
21    INTEGER :: t_rdown
22
23    INTEGER :: u_right
24    INTEGER :: u_rup
25    INTEGER :: u_lup
26    INTEGER :: u_left
27    INTEGER :: u_ldown
28    INTEGER :: u_rdown
29
30    INTEGER :: z_rup
31    INTEGER :: z_up
32    INTEGER :: z_lup
33    INTEGER :: z_ldown
34    INTEGER :: z_down
35    INTEGER :: z_rdown
36
37    INTEGER :: t_pos(6)
38    INTEGER :: u_pos(6)
39    INTEGER :: z_pos(6)
40       
41CONTAINS
42
43  SUBROUTINE swap_dimensions(ind)
44  USE domain_mod
45  IMPLICIT NONE
46    INTEGER,INTENT(IN) :: ind
47   
48    TYPE(t_domain),POINTER :: d
49   
50   
51!$OMP MASTER
52    d=>domain(ind)
53     
54     iim=d%iim
55     jjm=d%jjm
56     ii_begin=d%ii_begin
57     jj_begin=d%jj_begin
58     ii_end=d%ii_end
59     jj_end=d%jj_end
60     ii_nb=d%ii_nb
61     jj_nb=d%jj_nb
62   
63     ij_begin=(jj_begin-1)*iim+ii_begin
64     ij_end=(jj_end-1)*iim+ii_end 
65     ij_begin_ext=((jj_begin-1)-1)*iim+ii_begin-1
66     ij_end_ext = ((jj_end+1)-1)*iim+ii_end+1
67       
68     t_right=d%t_right
69     t_rup=d%t_rup
70     t_lup=d%t_lup
71     t_left=d%t_left
72     t_ldown=d%t_ldown
73     t_rdown=d%t_rdown
74
75     u_right=d%u_right
76     u_rup=d%u_rup
77     u_lup=d%u_lup
78     u_left=d%u_left
79     u_ldown=d%u_ldown
80     u_rdown=d%u_rdown
81
82     z_rup=d%z_rup
83     z_up=d%z_up
84     z_lup=d%z_lup
85     z_ldown=d%z_ldown
86     z_down=d%z_down
87     z_rdown=d%z_rdown
88     
89     t_pos(:)=d%t_pos(:)
90     u_pos(:)=d%u_pos(:)
91     z_pos(:)=d%z_pos(:)
92
93!$OMP END MASTER     
94!$OMP BARRIER
95   END SUBROUTINE swap_dimensions
96   
97END MODULE dimensions   
98   
Note: See TracBrowser for help on using the repository browser.