source: codes/icosagcm/trunk/src/etat0_start_file.f90 @ 499

Last change on this file since 499 was 496, checked in by ymipsl, 8 years ago

Restart from file, need to update redondant cells on frontier.

YM

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