Changeset 3708 for trunk/LMDZ.GENERIC
- Timestamp:
- Apr 2, 2025, 9:35:59 AM (3 months ago)
- Location:
- trunk/LMDZ.GENERIC
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/changelog.txt
r3696 r3708 2045 2045 Made calc_rayleigh.F90 a module and commented out some prints 2046 2046 which swamped the standard output. 2047 2048 == 02/04/2025 == EM 2049 Add reindexing of columns when reading/writing (re)startfi files. This is not 2050 necessary with the lon-lat (LMDZ.COMMON) dynamical core, but required when 2051 using DYNAMICO (where correspondance between dynamics and physics column 2052 indexes changes with number of computing cores). -
trunk/LMDZ.GENERIC/libf/phystd/iostart.F90
r3621 r3708 283 283 SUBROUTINE Get_field_rgen(nid_start,field_name,field,field_size, & 284 284 corners,edges,found) 285 USE netcdf 286 USE dimphy 287 USE mod_grid_phy_lmdz 288 USE mod_phys_lmdz_para 285 USE netcdf, ONLY: NF90_INQ_VARID, NF90_GET_VAR, NF90_NOERR 286 USE dimphy, ONLY: klon ! number of columns on local grid 287 USE geometry_mod, ONLY: ind_cell_glo 288 USE mod_grid_phy_lmdz, ONLY: klon_glo ! number of columns on global grid 289 USE mod_phys_lmdz_para, ONLY: is_master, bcast, scatter, gather 289 290 IMPLICIT NONE 290 291 INTEGER,INTENT(IN) :: nid_start 291 CHARACTER(LEN=*) :: Field_name292 INTEGER 293 REAL 292 CHARACTER(LEN=*),INTENT(IN) :: Field_name 293 INTEGER,INTENT(IN) :: field_size 294 REAL,INTENT(OUT) :: field(klon,field_size) 294 295 INTEGER,INTENT(IN) :: corners(4) 295 296 INTEGER,INTENT(IN) :: edges(4) 296 LOGICAL,OPTIONAL :: found 297 298 REAL :: field_glo(klon_glo,field_size) 297 LOGICAL,OPTIONAL,INTENT(OUT) :: found 298 299 REAL :: field_glo(klon_glo,field_size) ! field on global grid 300 REAL :: field_glo_tmp(klon_glo,field_size) 301 INTEGER :: ind_cell_glo_glo(klon_glo) ! cell indexes on global grid 299 302 LOGICAL :: tmp_found 300 303 INTEGER :: varid 301 INTEGER :: ierr 302 304 INTEGER :: ierr, i 305 306 ! gather columns indexes on global grid 307 CALL gather(ind_cell_glo,ind_cell_glo_glo) 308 303 309 IF (is_master) THEN 304 310 … … 306 312 307 313 IF (ierr==NF90_NOERR) THEN 308 CALL body(field_glo ,nid_start)314 CALL body(field_glo_tmp,nid_start) 309 315 tmp_found=.TRUE. 310 316 ELSE … … 312 318 ENDIF 313 319 314 ENDIF 320 ENDIF ! of IF (is_master) 315 321 316 322 CALL bcast(tmp_found) 317 323 318 324 IF (tmp_found) THEN 325 IF (is_master) THEN 326 ! reorder columns according to ind_cell_glo(:) indexes 327 DO i=1,klon_glo 328 field_glo(i,:)=field_glo_tmp(ind_cell_glo_glo(i),:) 329 ENDDO 330 ENDIF 319 331 CALL scatter(field_glo,field) 320 332 ENDIF … … 340 352 PRINT*, 'get_field_rgen: Failed reading <'//field_name//'>' 341 353 342 ! IF (field_name=='CLWCON' .OR. field_name=='RNEBCON' .OR. field_name=='RATQS') THEN 343 ! ! Essaye de lire le variable sur surface uniqument, comme fait avant 344 ! field_glo(:)=0. 345 ! ierr=NF90_GET_VAR(nid_start,varid,field_glo(1:klon_glo)) 346 ! IF (ierr/=NF90_NOERR) THEN 347 ! PRINT*, 'phyetat0: Lecture echouee aussi en 2D pour <'//field_name//'>' 348 ! CALL abort 349 ! ELSE 350 ! PRINT*, 'phyetat0: La variable <'//field_name//'> lu sur surface seulement'!, selon ancien format, le reste mis a zero' 351 ! END IF 352 ! ELSE 353 CALL abort 354 ! ENDIF 354 CALL abort_physic("get_field_rgen","Failed to read field",1) 355 355 ENDIF 356 356 … … 428 428 429 429 SUBROUTINE Get_var_rgen(nid_start,var_name,var,var_size,found) 430 USE netcdf 431 USE dimphy 432 USE mod_grid_phy_lmdz 433 USE mod_phys_lmdz_para 430 USE netcdf, ONLY: NF90_INQ_VARID, NF90_GET_VAR, NF90_NOERR 431 USE mod_phys_lmdz_para, ONLY: is_master, bcast 434 432 IMPLICIT NONE 435 433 INTEGER,INTENT(IN) :: nid_start 436 CHARACTER(LEN=*) :: var_name437 INTEGER 438 REAL 439 LOGICAL,OPTIONAL :: found434 CHARACTER(LEN=*),INTENT(IN) :: var_name 435 INTEGER,INTENT(IN) :: var_size 436 REAL,INTENT(OUT) :: var(var_size) 437 LOGICAL,OPTIONAL,INTENT(OUT) :: found 440 438 441 439 LOGICAL :: tmp_found … … 443 441 INTEGER :: ierr 444 442 445 IF (is_m pi_root .AND. is_omp_root) THEN443 IF (is_master) THEN 446 444 447 445 ierr=NF90_INQ_VARID(nid_start,var_name,varid) … … 686 684 687 685 SUBROUTINE put_field_rgen(nid_restart,field_name,title,field,field_size,time) 688 USE netcdf 689 USE dimphy 686 USE netcdf, ONLY: NF90_REDEF, NF90_ENDDEF, NF90_DEF_VAR, NF90_PUT_ATT, & 687 NF90_INQ_VARID, NF90_PUT_VAR, NF90_STRERROR, & 688 NF90_NOERR, NF90_FLOAT, NF90_DOUBLE 689 USE dimphy, ONLY: klon, klev, klevp1 690 690 USE comsoil_h, only: nsoilmx 691 USE mod_grid_phy_lmdz 692 USE mod_phys_lmdz_para 691 USE mod_grid_phy_lmdz, ONLY: klon_glo 692 USE mod_phys_lmdz_para, ONLY: is_master, gather 693 USE geometry_mod, ONLY: ind_cell_glo 693 694 ! USE slab_ice_h, only: noceanmx 694 695 USE ocean_slab_mod, ONLY: nslay … … 702 703 REAL,OPTIONAL,INTENT(IN) :: time 703 704 704 REAL :: field_glo(klon_glo,field_size) 705 REAL :: field_glo(klon_glo,field_size) 706 REAL :: field_glo_tmp(klon_glo,field_size) 707 INTEGER :: ind_cell_glo_glo(klon_glo) ! cell indexes on global grid 708 705 709 INTEGER :: ierr 706 710 INTEGER :: nvarid 707 711 INTEGER :: idim 708 709 CALL gather(field,field_glo) 710 711 IF (is_master) THEN 712 712 INTEGER :: i 713 714 ! gather indexes on global grid 715 CALL gather(ind_cell_glo,ind_cell_glo_glo) 716 ! gather field on master 717 CALL gather(field,field_glo_tmp) 718 719 IF (is_master) THEN 720 ! reorder columns 721 DO i=1,klon_glo 722 field_glo(ind_cell_glo_glo(i),:)=field_glo_tmp(i,:) 723 ENDDO 724 713 725 IF (field_size==1) THEN 714 726 ! input is a 1D "surface field" array
Note: See TracChangeset
for help on using the changeset viewer.