Ignore:
Timestamp:
Feb 2, 2016, 10:21:39 AM (9 years ago)
Author:
ymipsl
Message:

Add global index array in order to be able of correctly restart when changing data distribution between 2 jobs (not same number of mpi process or openmp threads)

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dynamico_lmdz/aquaplanet/LMDZ5/libf/phylmd/iostart.F90

    r3814 r3900  
    129129  USE netcdf
    130130  USE dimphy
     131  USE geometry_mod
    131132  USE mod_grid_phy_lmdz
    132133  USE mod_phys_lmdz_para
     
    138139   
    139140    REAL    :: field_glo(klon_glo,field_size)
     141    REAL    :: field_glo_tmp(klon_glo,field_size)
     142    INTEGER :: ind_cell_glo_glo(klon_glo)
    140143    LOGICAL :: tmp_found
    141144    INTEGER :: varid
    142     INTEGER :: ierr
    143    
    144     IF (is_mpi_root .AND. is_omp_root) THEN
     145    INTEGER :: ierr,i
     146
     147!    IF (is_master) ALLOCATE(ind_cell_glo_glo(1:klon_glo))
     148    CALL gather(ind_cell_glo,ind_cell_glo_glo)
     149   
     150    IF (is_master) THEN
    145151 
    146152      ierr=NF90_INQ_VARID(nid_start,Field_name,varid)
    147153     
    148154      IF (ierr==NF90_NOERR) THEN
    149         CALL body(field_glo)
     155        CALL body(field_glo_tmp)
    150156        tmp_found=.TRUE.
    151157      ELSE
     
    158164
    159165    IF (tmp_found) THEN
     166      IF (is_master) THEN 
     167        DO i=1,klon_glo
     168         field_glo(i,:)=field_glo_tmp(ind_cell_glo_glo(i),:)
     169        ENDDO
     170      ENDIF
    160171      CALL scatter(field_glo,field)
    161172    ENDIF
     
    384395  USE netcdf
    385396  USE dimphy
     397  USE geometry_mod
    386398  USE mod_grid_phy_lmdz
    387399  USE mod_phys_lmdz_para
     
    393405 
    394406  REAL                           :: field_glo(klon_glo,field_size)
    395   INTEGER                        :: ierr
     407  REAL                           :: field_glo_tmp(klon_glo,field_size)
     408  INTEGER,ALLOCATABLE            :: ind_cell_glo_glo(:)
     409  INTEGER                        :: ierr,i
    396410  INTEGER                        :: nvarid
    397411  INTEGER                        :: idim
    398412   
    399413   
    400     CALL gather(field,field_glo)
    401    
    402     IF (is_mpi_root .AND. is_omp_root) THEN
     414    IF (is_master) ALLOCATE(ind_cell_glo_glo(klon_glo))
     415    CALL gather(ind_cell_glo,ind_cell_glo_glo)
     416
     417    CALL gather(field,field_glo_tmp)
     418   
     419    IF (is_master) THEN
     420
     421      DO i=1,klon_glo
     422       field_glo(ind_cell_glo_glo(i),:)=field_glo_tmp(i,:)
     423      ENDDO
     424
    403425
    404426      IF (field_size==1) THEN
Note: See TracChangeset for help on using the changeset viewer.