source: codes/icosagcm/trunk/src/icosa_init.f90 @ 889

Last change on this file since 889 was 882, checked in by ymipsl, 5 years ago

Metric is now write in start.nc/restart.nc
Metric can be read at restart if read_metric=y.

YM

File size: 2.5 KB
Line 
1MODULE icosa_init_mod
2
3CONTAINS
4
5  SUBROUTINE icosa_init
6  USE icosa
7  USE timeloop_gcm_mod
8  USE disvert_mod
9  USE etat0_mod
10  USE wind_mod
11  USE mpipara
12  USE omp_para
13  USE vertical_interp_mod
14  USE trace
15  USE output_field_mod
16  USE xios_mod
17  USE write_field_mod
18  USE physics_mod
19  USE tracer_mod
20  USE restart_mod
21  USE etat0_mod
22  USE diagflux_mod
23  USE profiling_mod
24  USE read_metric_mod
25  USE xios
26  IMPLICIT NONE
27 
28    CALL init_profiling
29    CALL init_mpipara
30    CALL trace_off
31    CALL xios_init
32    CALL init_earth_const 
33    CALL init_grid_param(is_mpi_master)
34    CALL init_omp_para(is_mpi_master)
35    CALL compute_metric
36    CALL compute_domain
37    CALL init_transfert
38    CALL init_writefield
39    CALL init_trace
40
41  !$OMP PARALLEL 
42    CALL switch_omp_no_distrib_level
43    CALL read_metric
44    CALL compute_geometry
45    CALL check_total_area
46 
47    CALL init_disvert 
48    CALL init_vertical_interp
49    CALL init_tracer
50   
51    CALL WriteField("Ai",geom%Ai)
52 
53    IF (is_mpi_root) CALL write_apbp
54    CALL init_time
55    CALL init_restart
56    CALL init_etat0
57
58    CALL output_field_init
59    CALL init_timeloop
60
61  !$OMP END PARALLEL
62
63    CALL init_physics
64
65  !$OMP PARALLEL
66 
67    CALL init_diagflux
68    CALL zero_du_phys
69   
70    IF (is_omp_master) CALL xios_timer_resume("dynamico")
71    CALL timeloop
72    IF (is_omp_master) CALL xios_timer_suspend("dynamico")
73   
74    CALL switch_omp_no_distrib_level
75  !$OMP END PARALLEL
76
77    CALL output_field_finalize
78    CALL close_files
79    CALL close_time_counter
80    CALL finalize_mpipara
81
82  CONTAINS
83 
84    SUBROUTINE check_total_area
85    IMPLICIT NONE
86    TYPE(t_field),POINTER,SAVE :: sum_ne(:)
87    TYPE(t_field),POINTER,SAVE :: sum_ne_glo(:)
88    REAL(rstd),POINTER :: pt_sum_ne(:)
89    INTEGER :: ind,i,j,k,n
90    REAL(rstd) :: vect(3,6)
91    REAL(rstd) :: centr(3),dist   
92    REAL(rstd) :: tot_sum=0
93
94      CALL allocate_field(sum_ne,field_T,type_real)
95   
96    !$OMP BARRIER
97    !$OMP MASTER
98      DO ind=1,ndomain
99       
100        pt_sum_ne=sum_ne(ind)
101       
102        CALL swap_dimensions(ind)
103        CALL swap_geometry(ind)
104       
105        DO j=jj_begin,jj_end
106          DO i=ii_begin,ii_end
107            n=(j-1)*iim+i
108            pt_sum_ne(n)=0
109            DO k=1,6
110              pt_sum_ne(n)=pt_sum_ne(n)+ne(n,k)
111            ENDDO
112            IF (domain(ind)%own(i,j)) tot_sum=tot_sum+Ai(n)
113          ENDDO
114        ENDDO
115      ENDDO
116   
117      IF (is_mpi_root) PRINT *," Diff surf",1-tot_sum/(4*Pi*radius*radius)
118    !$OMP END MASTER
119   
120    END SUBROUTINE check_total_area
121 
122  END SUBROUTINE icosa_init
123
124END MODULE icosa_init_mod
Note: See TracBrowser for help on using the repository browser.