source: codes/icosagcm/trunk/src/icosa_gcm.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.9 KB
Line 
1PROGRAM ICOSA_GCM
2  USE icosa
3  USE timeloop_gcm_mod
4  USE disvert_mod
5  USE etat0_mod
6  USE wind_mod
7  USE mpipara
8  USE omp_para
9  USE vertical_interp_mod
10  USE trace
11  USE output_field_mod
12  USE xios_mod
13  USE write_field
14!  USE getin_mod
15  IMPLICIT NONE
16 
17  CALL init_mpipara
18  CALL trace_off
19  CALL xios_init
20  CALL init_earth_const 
21  CALL init_grid_param(is_mpi_master)
22  CALL init_omp_para(is_mpi_master)
23  CALL compute_metric
24  CALL compute_domain
25  CALL init_transfert
26  CALL init_writefield
27  CALL init_trace
28
29!$OMP PARALLEL 
30  CALL switch_omp_no_distrib_level
31  CALL compute_geometry
32  CALL check_total_area
33 
34  CALL init_disvert 
35  CALL init_vertical_interp
36
37  CALL WriteField("Ai",geom%Ai)
38 
39  IF (is_mpi_root) CALL write_apbp
40  CALL init_time
41
42  CALL output_field_init
43  CALL init_timeloop
44 
45  CALL timeloop
46  CALL switch_omp_no_distrib_level
47!$OMP END PARALLEL
48
49  CALL output_field_finalize
50  CALL close_files
51  CALL close_time_counter
52  CALL finalize_mpipara
53
54CONTAINS
55 
56  SUBROUTINE check_total_area
57    IMPLICIT NONE
58    TYPE(t_field),POINTER,SAVE :: sum_ne(:)
59    TYPE(t_field),POINTER,SAVE :: sum_ne_glo(:)
60    REAL(rstd),POINTER :: pt_sum_ne(:)
61   
62    INTEGER :: ind,i,j,k,n
63    REAL(rstd) :: vect(3,6)
64    REAL(rstd) :: centr(3),dist   
65    REAL(rstd) :: tot_sum=0
66    CALL allocate_field(sum_ne,field_T,type_real)
67   
68    !$OMP BARRIER
69    !$OMP MASTER
70    DO ind=1,ndomain
71       
72       pt_sum_ne=sum_ne(ind)
73       
74       CALL swap_dimensions(ind)
75       CALL swap_geometry(ind)
76       
77       DO j=jj_begin,jj_end
78          DO i=ii_begin,ii_end
79             n=(j-1)*iim+i
80             pt_sum_ne(n)=0
81             DO k=1,6
82                pt_sum_ne(n)=pt_sum_ne(n)+ne(n,k)
83             ENDDO
84             IF (domain(ind)%own(i,j)) tot_sum=tot_sum+Ai(n)
85          ENDDO
86       ENDDO
87    ENDDO
88   
89    IF (is_mpi_root) PRINT *," Diff surf",1-tot_sum/(4*Pi*radius*radius)
90    !$OMP END MASTER
91   
92  END SUBROUTINE check_total_area
93END PROGRAM ICOSA_gcm
Note: See TracBrowser for help on using the repository browser.