source: codes/icosagcm/devel/src/initial/etat0_start_file.f90 @ 595

Last change on this file since 595 was 531, checked in by dubos, 7 years ago

devel : tyding up sources

File size: 3.7 KB
Line 
1MODULE etat0_start_file_mod
2
3
4
5
6CONTAINS
7 
8  SUBROUTINE init_etat0
9  USE xios_mod
10  USE omp_para
11  USE time_mod
12  USE restart_mod
13  IMPLICIT NONE
14   
15    IF (is_omp_master) THEN
16      IF (using_xios) THEN
17        CALL xios_set_file_attr("start", enabled=.TRUE., mode="read", output_freq=(itaumax+1)*xios_timestep)
18      ENDIF
19    ENDIF
20    write_start=.FALSE.
21   
22  END SUBROUTINE init_etat0 
23 
24  SUBROUTINE etat0(f_ps,f_phis,f_theta_rhodz,f_u, f_q)
25  USE icosa
26  USE restart_mod
27  USE wind_mod
28  USE write_field_mod
29  USE time_mod
30  USE transfert_mod
31  USE omp_para
32  USE checksum_mod
33  IMPLICIT NONE
34    TYPE(t_field),POINTER :: f_ps(:)
35    TYPE(t_field),POINTER :: f_phis(:)
36    TYPE(t_field),POINTER :: f_theta_rhodz(:)
37    TYPE(t_field),POINTER :: f_u(:)
38    TYPE(t_field),POINTER :: f_q(:)
39 
40    TYPE(t_field),POINTER,SAVE :: f_ulon(:)
41    TYPE(t_field),POINTER,SAVE :: f_ulat(:)
42    TYPE(t_field),POINTER,SAVE :: f_theta_rhodz_1d(:)
43    REAL(rstd), POINTER :: theta_rhodz(:,:,:),theta_rhodz_1d(:,:)
44
45    LOGICAL :: etat0_start_file_colocated=.FALSE.
46    INTEGER :: ind
47
48      CALL getin("etat0_start_file_colocated",etat0_start_file_colocated) 
49      CALL allocate_field(f_theta_rhodz_1d,field_t,type_real,llm,name='theta_rhodz')
50
51!$OMP BARRIER
52       DO ind=1, ndomain
53         IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE
54         f_q(ind)%rval4d(:,:,:)=0.
55       ENDDO
56!$OMP BARRIER
57      CALL checksum(f_q)
58      IF (.NOT. etat0_start_file_colocated) THEN   
59        CALL allocate_field(f_ulon,field_t,type_real,llm,name='ulon')
60        CALL allocate_field(f_ulat,field_t,type_real,llm,name='ulat')
61        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_u, f_q)
62        CALL transfert_request(f_ps,req_i1)
63        CALL transfert_request(f_ps,req_i0)
64        CALL transfert_request(f_phis,req_i1)
65        CALL transfert_request(f_phis,req_i0)
66        CALL transfert_request(f_theta_rhodz_1d,req_i1)
67        CALL transfert_request(f_theta_rhodz_1d,req_i0)
68        CALL transfert_request(f_q,req_i1)
69        CALL transfert_request(f_q,req_i0)
70        CALL transfert_request(f_u,req_e1_vect)
71        CALL transfert_request(f_u,req_e0_vect)
72        CALL un2ulonlat(f_u,f_ulon,f_ulat)
73
74        CALL deallocate_field(f_ulon)
75        CALL deallocate_field(f_ulat)
76
77      ELSE
78        CALL allocate_field(f_ulon,field_t,type_real,llm,name='ulon')
79        CALL allocate_field(f_ulat,field_t,type_real,llm,name='ulat')
80        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_ulon,f_ulat, f_q)
81        CALL transfert_request(f_ulat,req_i1)
82        CALL transfert_request(f_ulat,req_i0)
83        CALL transfert_request(f_ulon,req_i1)
84        CALL transfert_request(f_ulon,req_i0)
85
86        CALL ulonlat2un(f_ulon,f_ulat,f_u)
87
88        CALL transfert_request(f_ps,req_i1)
89        CALL transfert_request(f_ps,req_i0)
90        CALL transfert_request(f_phis,req_i1)
91        CALL transfert_request(f_phis,req_i0)
92        CALL transfert_request(f_theta_rhodz_1d,req_i1)
93        CALL transfert_request(f_theta_rhodz_1d,req_i0)
94        CALL transfert_request(f_q,req_i1)
95        CALL transfert_request(f_q,req_i0)
96        CALL transfert_request(f_u,req_e1_vect)
97        CALL transfert_request(f_u,req_e0_vect)
98       
99        CALL deallocate_field(f_ulon)
100        CALL deallocate_field(f_ulat)
101      ENDIF
102
103!$OMP BARRIER   
104    DO ind=1, ndomain
105       IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE
106       theta_rhodz=f_theta_rhodz(ind) ; theta_rhodz_1d=f_theta_rhodz_1d(ind)
107       theta_rhodz(:,:,1)=theta_rhodz_1d(:,:)
108    ENDDO
109!$OMP BARRIER   
110
111      CALL bcast(itau0)
112      CALL getin("etat0_start_iteration",itau0)       
113
114  END SUBROUTINE etat0
115 
116 
117END MODULE etat0_start_file_mod
Note: See TracBrowser for help on using the repository browser.