source: codes/icosagcm/trunk/src/icosa_gcm.f90 @ 187

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

Add new openMP parallelism based on distribution of domains on threads. There is no more limitation of number of threads by MPI process.

YM

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