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

Last change on this file since 524 was 517, checked in by ymipsl, 8 years ago

forgotten files from previous commit

YM

File size: 3.7 KB
RevLine 
[266]1MODULE etat0_start_file_mod
2
3
4
5
6CONTAINS
7 
[483]8  SUBROUTINE init_etat0
9  USE xios_mod
10  USE omp_para
[517]11  USE time_mod
12  USE restart_mod
[483]13  IMPLICIT NONE
14   
15    IF (is_omp_master) THEN
[517]16      IF (using_xios) THEN
17        CALL xios_set_file_attr("start", enabled=.TRUE., mode="read", output_freq=(itaumax+1)*xios_timestep)
18      ENDIF
[483]19    ENDIF
[517]20    write_start=.FALSE.
[483]21   
22  END SUBROUTINE init_etat0 
23 
[266]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
[347]28  USE write_field_mod
[266]29  USE time_mod
30  USE transfert_mod
[476]31  USE omp_para
[496]32  USE checksum_mod
[266]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(:)
[476]42    TYPE(t_field),POINTER,SAVE :: f_theta_rhodz_1d(:)
43    REAL(rstd), POINTER :: theta_rhodz(:,:,:),theta_rhodz_1d(:,:)
[266]44
45    LOGICAL :: etat0_start_file_colocated=.FALSE.
46    INTEGER :: ind
47
48      CALL getin("etat0_start_file_colocated",etat0_start_file_colocated) 
[476]49      CALL allocate_field(f_theta_rhodz_1d,field_t,type_real,llm,name='theta_rhodz')
[266]50
[496]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)
[266]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')
[476]61        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_u, f_q)
[266]62        CALL transfert_request(f_ps,req_i1)
[496]63        CALL transfert_request(f_ps,req_i0)
[266]64        CALL transfert_request(f_phis,req_i1)
[496]65        CALL transfert_request(f_phis,req_i0)
[476]66        CALL transfert_request(f_theta_rhodz_1d,req_i1)
[496]67        CALL transfert_request(f_theta_rhodz_1d,req_i0)
[266]68        CALL transfert_request(f_q,req_i1)
[496]69        CALL transfert_request(f_q,req_i0)
[266]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')
[476]80        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_ulon,f_ulat, f_q)
[266]81        CALL transfert_request(f_ulat,req_i1)
[496]82        CALL transfert_request(f_ulat,req_i0)
[266]83        CALL transfert_request(f_ulon,req_i1)
[496]84        CALL transfert_request(f_ulon,req_i0)
[266]85
86        CALL ulonlat2un(f_ulon,f_ulat,f_u)
87
88        CALL transfert_request(f_ps,req_i1)
[496]89        CALL transfert_request(f_ps,req_i0)
[266]90        CALL transfert_request(f_phis,req_i1)
[496]91        CALL transfert_request(f_phis,req_i0)
[476]92        CALL transfert_request(f_theta_rhodz_1d,req_i1)
[496]93        CALL transfert_request(f_theta_rhodz_1d,req_i0)
[266]94        CALL transfert_request(f_q,req_i1)
[496]95        CALL transfert_request(f_q,req_i0)
[266]96        CALL transfert_request(f_u,req_e1_vect)
[496]97        CALL transfert_request(f_u,req_e0_vect)
[266]98       
99        CALL deallocate_field(f_ulon)
100        CALL deallocate_field(f_ulat)
101      ENDIF
102
[476]103!$OMP BARRIER   
104    DO ind=1, ndomain
[496]105       IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE
[476]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
[266]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.