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

Last change on this file since 252 was 202, checked in by dubos, 10 years ago

OpenMP fixes (not tested)

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