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

Last change on this file since 327 was 327, checked in by ymipsl, 9 years ago

Merge recent developments from saturn branch onto trunk.

  • lmdz generic physics interface
  • performance improvment on mix mpi/openmp
  • asynchrone and overlaping communication
  • best domain distribution between process and threads
  • ....

This version is compatible with the actual saturn version and the both branches are considered merged on dynamico component.

YM

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