source: codes/icosagcm/trunk/src/initial/etat0_start_file.f90 @ 1048

Last change on this file since 1048 was 819, checked in by ymipsl, 5 years ago

New parameter in run .def

etat0_start_iteration_reset = y/n default (n)

Reset the start iteration value read in start.nc to 0

YM

File size: 3.8 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
[819]47    LOGICAL :: raz
[266]48
49      CALL getin("etat0_start_file_colocated",etat0_start_file_colocated) 
[476]50      CALL allocate_field(f_theta_rhodz_1d,field_t,type_real,llm,name='theta_rhodz')
[266]51
[496]52!$OMP BARRIER
53       DO ind=1, ndomain
54         IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE
55         f_q(ind)%rval4d(:,:,:)=0.
56       ENDDO
57!$OMP BARRIER
58      CALL checksum(f_q)
[266]59      IF (.NOT. etat0_start_file_colocated) THEN   
60        CALL allocate_field(f_ulon,field_t,type_real,llm,name='ulon')
61        CALL allocate_field(f_ulat,field_t,type_real,llm,name='ulat')
[476]62        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_u, f_q)
[266]63        CALL transfert_request(f_ps,req_i1)
[496]64        CALL transfert_request(f_ps,req_i0)
[266]65        CALL transfert_request(f_phis,req_i1)
[496]66        CALL transfert_request(f_phis,req_i0)
[476]67        CALL transfert_request(f_theta_rhodz_1d,req_i1)
[496]68        CALL transfert_request(f_theta_rhodz_1d,req_i0)
[266]69        CALL transfert_request(f_q,req_i1)
[496]70        CALL transfert_request(f_q,req_i0)
[266]71        CALL transfert_request(f_u,req_e1_vect)
72        CALL transfert_request(f_u,req_e0_vect)
73        CALL un2ulonlat(f_u,f_ulon,f_ulat)
74
75        CALL deallocate_field(f_ulon)
76        CALL deallocate_field(f_ulat)
77
78      ELSE
79        CALL allocate_field(f_ulon,field_t,type_real,llm,name='ulon')
80        CALL allocate_field(f_ulat,field_t,type_real,llm,name='ulat')
[476]81        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_ulon,f_ulat, f_q)
[266]82        CALL transfert_request(f_ulat,req_i1)
[496]83        CALL transfert_request(f_ulat,req_i0)
[266]84        CALL transfert_request(f_ulon,req_i1)
[496]85        CALL transfert_request(f_ulon,req_i0)
[266]86
87        CALL ulonlat2un(f_ulon,f_ulat,f_u)
88
89        CALL transfert_request(f_ps,req_i1)
[496]90        CALL transfert_request(f_ps,req_i0)
[266]91        CALL transfert_request(f_phis,req_i1)
[496]92        CALL transfert_request(f_phis,req_i0)
[476]93        CALL transfert_request(f_theta_rhodz_1d,req_i1)
[496]94        CALL transfert_request(f_theta_rhodz_1d,req_i0)
[266]95        CALL transfert_request(f_q,req_i1)
[496]96        CALL transfert_request(f_q,req_i0)
[266]97        CALL transfert_request(f_u,req_e1_vect)
[496]98        CALL transfert_request(f_u,req_e0_vect)
[266]99       
100        CALL deallocate_field(f_ulon)
101        CALL deallocate_field(f_ulat)
102      ENDIF
103
[476]104!$OMP BARRIER   
105    DO ind=1, ndomain
[496]106       IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE
[476]107       theta_rhodz=f_theta_rhodz(ind) ; theta_rhodz_1d=f_theta_rhodz_1d(ind)
108       theta_rhodz(:,:,1)=theta_rhodz_1d(:,:)
109    ENDDO
110!$OMP BARRIER   
111
[266]112      CALL bcast(itau0)
[819]113      raz=.FALSE.
114      CALL getin("etat0_start_iteration_reset",raz)
115      IF (raz) itau0=0
[266]116      CALL getin("etat0_start_iteration",itau0)       
117
118  END SUBROUTINE etat0
119 
120 
121END MODULE etat0_start_file_mod
Note: See TracBrowser for help on using the repository browser.