Changeset 396
- Timestamp:
- 06/06/16 20:40:35 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/field.f90
r350 r396 302 302 END SUBROUTINE deallocate_field_glo 303 303 304 SUBROUTINE extract_slice(field_in, field_out, l) 305 USE domain_mod 306 USE omp_para 307 IMPLICIT NONE 308 TYPE(t_field) :: field_in(:) 309 TYPE(t_field) :: field_out(:) 310 INTEGER,INTENT(IN) :: l 311 312 INTEGER :: ind 313 INTEGER :: data_type 314 315 !$OMP BARRIER 316 DO ind=1,ndomain 317 data_type=field_in(ind)%data_type 318 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 319 320 IF (field_in(ind)%ndim==3 .AND. field_out(ind)%ndim==2) THEN 321 IF (data_type==type_integer) field_out(ind)%ival2d=field_in(ind)%ival3d(:,l) 322 IF (data_type==type_real) field_out(ind)%rval2d=field_in(ind)%rval3d(:,l) 323 IF (data_type==type_logical) field_out(ind)%lval2d=field_in(ind)%lval3d(:,l) 324 ELSE IF (field_in(ind)%ndim==4 .AND. field_out(ind)%ndim==3) THEN 325 IF (data_type==type_integer) field_out(ind)%ival3d=field_in(ind)%ival4d(:,:,l) 326 IF (data_type==type_real) field_out(ind)%rval3d=field_in(ind)%rval4d(:,:,l) 327 IF (data_type==type_logical) field_out(ind)%lval3d=field_in(ind)%lval4d(:,:,l) 328 ELSE 329 PRINT *, 'extract_slice : cannot extract slice, dimension incompatible' 330 STOP 331 ENDIF 332 ENDDO 333 !$OMP BARRIER 334 END SUBROUTINE extract_slice 335 336 337 SUBROUTINE insert_slice(field_in, field_out, l) 338 USE domain_mod 339 USE omp_para 340 IMPLICIT NONE 341 TYPE(t_field) :: field_in(:) 342 TYPE(t_field) :: field_out(:) 343 INTEGER,INTENT(IN) :: l 344 345 INTEGER :: ind 346 INTEGER :: data_type 347 348 !$OMP BARRIER 349 DO ind=1,ndomain 350 data_type=field_in(ind)%data_type 351 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 352 353 IF (field_in(ind)%ndim==2 .AND. field_out(ind)%ndim==3) THEN 354 IF (data_type==type_integer) field_out(ind)%ival3d(:,l)=field_in(ind)%ival2d(:) 355 IF (data_type==type_real) field_out(ind)%rval3d(:,l)=field_in(ind)%rval2d(:) 356 IF (data_type==type_logical) field_out(ind)%lval3d(:,l)=field_in(ind)%lval2d(:) 357 ELSE IF (field_in(ind)%ndim==4 .AND. field_out(ind)%ndim==3) THEN 358 IF (data_type==type_integer) field_out(ind)%ival4d(:,:,l)=field_out(ind)%ival3d(:,:) 359 IF (data_type==type_real) field_out(ind)%rval4d(:,:,l)=field_out(ind)%rval3d(:,:) 360 IF (data_type==type_logical) field_out(ind)%lval4d(:,:,l)=field_out(ind)%lval3d(:,:) 361 ELSE 362 PRINT *, 'extract_slice : cannot insert slice, dimension incompatible' 363 STOP 364 ENDIF 365 ENDDO 366 !$OMP BARRIER 367 368 END SUBROUTINE insert_slice 369 304 370 SUBROUTINE getval_r2d(field_pt,field) 305 371 IMPLICIT NONE
Note: See TracChangeset
for help on using the changeset viewer.