Changeset 568
- Timestamp:
- 10/12/17 17:49:23 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/initial/etat0.f90
r549 r568 1 1 MODULE etat0_mod 2 2 USE icosa 3 USE omp_para 3 4 IMPLICIT NONE 4 5 PRIVATE … … 10 11 11 12 PUBLIC :: etat0, init_etat0, etat0_type 13 14 ! Important notes for OpenMP 15 ! When etat0 is called, vertical OpenMP parallelism is deactivated. 16 ! Therefore only the omp_level_master thread must work, i.e. : 17 ! !$OMP BARRIER 18 ! DO ind=1,ndomain 19 ! IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 20 ! ... 21 ! END DO 22 ! !$OMP BARRIER 23 ! There MUST be NO OMP BARRIER inside the DO-LOOP or any routine it calls. 12 24 13 25 CONTAINS 14 26 15 27 SUBROUTINE init_etat0 16 USE etat0_database_mod, ONLY: init_etat0_database => init_etat0 17 USE etat0_start_file_mod, ONLY: init_etat0_start_file => init_etat0 18 USE etat0_heldsz_mod, ONLY: init_etat0_held_suarez => init_etat0 19 IMPLICIT NONE 20 28 USE etat0_database_mod, ONLY: init_etat0_database => init_etat0 29 USE etat0_start_file_mod, ONLY: init_etat0_start_file => init_etat0 30 USE etat0_heldsz_mod, ONLY: init_etat0_held_suarez => init_etat0 31 21 32 CALL getin("etat0",etat0_type) 22 33 … … 75 86 USE etat0_start_file_mod, ONLY : etat0_start_file=>etat0 76 87 77 IMPLICIT NONE78 88 TYPE(t_field),POINTER :: f_ps(:) 79 89 TYPE(t_field),POINTER :: f_mass(:) … … 160 170 END SELECT 161 171 162 ! !$OMP BARRIER163 172 IF(autoinit_mass) THEN 164 173 DO ind=1,ndomain 165 IF (.NOT. assigned_domain(ind) ) CYCLE174 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 166 175 CALL swap_dimensions(ind) 167 176 CALL swap_geometry(ind) … … 175 184 SUBROUTINE etat0_collocated(f_phis,f_ps,f_mass,f_theta_rhodz,f_u, f_geopot,f_W, f_q) 176 185 USE theta2theta_rhodz_mod 177 IMPLICIT NONE178 186 TYPE(t_field),POINTER :: f_ps(:) 179 187 TYPE(t_field),POINTER :: f_mass(:) … … 200 208 201 209 DO ind=1,ndomain 202 IF (.NOT. assigned_domain(ind)) CYCLE 210 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 211 ! IF (.NOT. assigned_domain(ind)) CYCLE 203 212 CALL swap_dimensions(ind) 204 213 CALL swap_geometry(ind) … … 232 241 USE exner_mod 233 242 USE omp_para 234 IMPLICIT NONE235 243 REAL(rstd),INTENT(IN) :: ps(iim*jjm) 236 244 REAL(rstd),INTENT(IN) :: temp(iim*jjm,llm) … … 248 256 CALL compute_pression(ps,p,offset) 249 257 ! flush p 250 !$OMP BARRIER251 258 DO l = ll_begin, ll_end 252 259 DO j=jj_begin-offset,jj_end+offset … … 278 285 ENDDO 279 286 ENDDO 280 !$OMP BARRIER281 287 END SUBROUTINE compute_temperature2entropy 282 288 … … 296 302 USE etat0_dcmip2016_cyclone_mod, ONLY : compute_dcmip2016_cyclone => compute_etat0 297 303 USE etat0_dcmip2016_supercell_mod, ONLY : compute_dcmip2016_supercell => compute_etat0 298 IMPLICIT NONE299 304 REAL(rstd),INTENT(INOUT) :: ps(iim*jjm) 300 305 REAL(rstd),INTENT(INOUT) :: mass(iim*jjm,llm) … … 328 333 autoinit_NH = .NOT. hydrostatic 329 334 w(:,:) = 0 330 331 !$OMP BARRIER332 335 333 336 SELECT CASE (TRIM(etat0_type)) … … 391 394 END IF 392 395 393 !$OMP BARRIER394 395 396 CALL compute_wind_perp_from_lonlat_compound(ulon_e, ulat_e, u) 396 397 … … 405 406 406 407 SUBROUTINE compute_etat0_isothermal(ngrid, phis, ps, temp, ulon, ulat, q) 407 IMPLICIT NONE408 408 INTEGER, INTENT(IN) :: ngrid 409 409 REAL(rstd),INTENT(OUT) :: phis(ngrid)
Note: See TracChangeset
for help on using the changeset viewer.