source: codes/icosagcm/devel/src/icosa_init.f90 @ 813

Last change on this file since 813 was 813, checked in by jisesh, 5 years ago

devel ; towards Fortran driver for unstructured/LAM meshes

File size: 2.6 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 init_unstructured_mod, ONLY: init_grid_type
25  IMPLICIT NONE
26 
27    CALL init_profiling
28    CALL init_mpipara
29    CALL init_grid_type
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 compute_geometry
44    CALL check_total_area
45 
46    CALL init_disvert 
47    CALL init_vertical_interp
48    CALL init_tracer
49   
50    CALL WriteField("Ai",geom%Ai)
51 
52    IF (is_mpi_root) CALL write_apbp
53    CALL init_time
54    CALL init_restart
55    CALL init_etat0
56
57    CALL output_field_init
58    CALL init_timeloop
59
60  !$OMP END PARALLEL
61
62    CALL init_physics
63
64  !$OMP PARALLEL
65 
66    CALL init_diagflux
67    CALL zero_du_phys
68    CALL timeloop
69    CALL switch_omp_no_distrib_level
70  !$OMP END PARALLEL
71
72    CALL output_field_finalize
73    CALL close_files
74    CALL close_time_counter
75    CALL finalize_mpipara
76
77  CONTAINS
78 
79    SUBROUTINE check_total_area
80    IMPLICIT NONE
81    TYPE(t_field),POINTER,SAVE :: sum_ne(:)
82    TYPE(t_field),POINTER,SAVE :: sum_ne_glo(:)
83    REAL(rstd),POINTER :: pt_sum_ne(:)
84    INTEGER :: ind,i,j,k,n
85    REAL(rstd) :: vect(3,6)
86    REAL(rstd) :: centr(3),dist   
87    REAL(rstd) :: tot_sum=0
88
89      CALL allocate_field(sum_ne,field_T,type_real)
90   
91    !$OMP BARRIER
92    !$OMP MASTER
93      DO ind=1,ndomain
94       
95        pt_sum_ne=sum_ne(ind)
96       
97        CALL swap_dimensions(ind)
98        CALL swap_geometry(ind)
99       
100        DO j=jj_begin,jj_end
101          DO i=ii_begin,ii_end
102            n=(j-1)*iim+i
103            pt_sum_ne(n)=0
104            DO k=1,6
105              pt_sum_ne(n)=pt_sum_ne(n)+ne(n,k)
106            ENDDO
107            IF (domain(ind)%own(i,j)) tot_sum=tot_sum+Ai(n)
108          ENDDO
109        ENDDO
110      ENDDO
111   
112      IF (is_mpi_root) PRINT *," Diff surf",1-tot_sum/(4*Pi*radius*radius)
113    !$OMP END MASTER
114   
115    END SUBROUTINE check_total_area
116 
117  END SUBROUTINE icosa_init
118
119  SUBROUTINE force_recompile_unstructured
120    USE timestep_unstructured_mod
121    USE transport_unstructured_mod
122  END SUBROUTINE force_recompile_unstructured
123
124END MODULE icosa_init_mod
Note: See TracBrowser for help on using the repository browser.