Ignore:
Timestamp:
02/09/15 20:18:34 (9 years ago)
Author:
ymipsl
Message:

Merge recent developments from saturn branch onto trunk.

  • lmdz generic physics interface
  • performance improvment on mix mpi/openmp
  • asynchrone and overlaping communication
  • best domain distribution between process and threads
  • ....

This version is compatible with the actual saturn version and the both branches are considered merged on dynamico component.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/domain.f90

    r295 r327  
    402402  SUBROUTINE assign_domain 
    403403  USE mpipara 
     404  USE grid_param 
    404405  IMPLICIT NONE 
    405406    INTEGER :: nb_domain(0:mpi_size-1) 
    406407    INTEGER :: rank, ind,ind_glo 
     408    INTEGER :: block_j,jb,i,j,nd_glo,n,nf 
     409    LOGICAL :: exit 
    407410     
    408411    DO rank=0,mpi_size-1 
     
    415418    ALLOCATE(domloc_glo_ind(ndomain)) 
    416419     
     420     
     421    block_j=sqrt(nsplit_i*nsplit_j*nb_face*1./mpi_size) 
     422    exit=.FALSE. 
     423    jb=1 
     424    i=1 
     425    j=1 
     426    ind=1 
     427    nd_glo=0 
    417428    rank=0 
    418     ind=0 
    419     DO ind_glo=1,ndomain_glo 
    420       ind=ind+1 
     429    DO WHILE (.NOT. exit) 
     430 
     431      IF (j==MIN(jb+block_j,nsplit_j*nb_face+1)) THEN 
     432        j=jb 
     433        i=i+1 
     434      ENDIF 
     435 
     436      IF (i>nsplit_i) THEN  
     437        i=1 
     438        jb=jb+block_j 
     439        j=jb 
     440      ENDIF 
     441       
     442      IF (ind>nb_domain(rank)) THEN 
     443        rank=rank+1 
     444        ind=1 
     445      ENDIF  
     446      ind_glo=(j-1)*nsplit_i+i 
     447 
     448      nd_glo=nd_glo+1 
     449      IF (nd_glo==ndomain_glo) THEN 
     450 
     451        exit=.TRUE. 
     452        IF (.NOT. (rank==mpi_size-1 .AND. ind==nb_domain(rank) )) THEN 
     453          PRINT *, "Distribution problem in assign_domain" 
     454          STOP 
     455        ENDIF 
     456 
     457      ENDIF 
     458 
    421459      domglo_rank(ind_glo)=rank 
    422460      domglo_loc_ind(ind_glo)=ind 
     
    426464      ENDIF 
    427465       
    428       IF (ind==nb_domain(rank)) THEN 
    429         rank=rank+1 
    430         ind=0 
    431       ENDIF 
     466      j=j+1 
     467      ind=ind+1 
     468       
    432469    ENDDO 
     470 
     471    IF (is_mpi_master) THEN 
     472    
     473      ind_glo=0 
     474      WRITE(*,'') 
     475      PRINT*, '      MPI PROCESS DISTRIBUTION' 
     476      WRITE(*,'') 
     477       
     478      WRITE(*,"(' ')", ADVANCE='NO') 
     479      DO n=1,nsplit_i*7-1 
     480        WRITE(*,"('=')", ADVANCE='NO') 
     481      ENDDO 
     482      WRITE(*,'') 
     483 
     484      DO nf=1,nb_face 
     485        DO j=1,nsplit_j 
     486          IF (j>1) THEN 
     487            WRITE(*,"(' ')", ADVANCE='NO') 
     488            DO n=1,nsplit_i*7-1 
     489              WRITE(*,"('-')", ADVANCE='NO') 
     490            ENDDO 
     491            WRITE(*,'') 
     492          ENDIF 
     493 
     494          WRITE(*,"('|')", ADVANCE='NO') 
     495          DO i=1,nsplit_i 
     496            WRITE(*,"(' ','    ',' |')",ADVANCE='NO')          
     497          ENDDO 
     498          WRITE(*,'') 
     499 
     500          WRITE(*,"('|')", ADVANCE='NO') 
     501          DO i=1,nsplit_i 
     502            ind_glo=ind_glo+1 
     503            WRITE(*,"(' ',i4.4  ,' |')",ADVANCE='NO'),domglo_rank(ind_glo)            
     504          END DO 
     505          WRITE(*,'') 
     506 
     507          WRITE(*,"('|')", ADVANCE='NO') 
     508          DO i=1,nsplit_i 
     509            WRITE(*,"(' ','    ',' |')",ADVANCE='NO')          
     510          ENDDO 
     511          WRITE(*,'') 
     512 
     513        ENDDO 
     514           
     515        WRITE(*,"(' ')", ADVANCE='NO') 
     516        DO n=1,nsplit_i*7-1 
     517          WRITE(*,"('=')", ADVANCE='NO') 
     518        ENDDO 
     519        WRITE(*,'') 
     520      ENDDO 
     521    ENDIF 
     522               
     523!    rank=0 
     524!    ind=0 
     525!    DO ind_glo=1,ndomain_glo 
     526!      ind=ind+1 
     527!      domglo_rank(ind_glo)=rank 
     528!      domglo_loc_ind(ind_glo)=ind 
     529!      IF (rank==mpi_rank) THEN  
     530!        CALL copy_domain(domain_glo(ind_glo),domain(ind)) 
     531!        domloc_glo_ind(ind)=ind_glo 
     532!      ENDIF 
     533!       
     534!      IF (ind==nb_domain(rank)) THEN 
     535!        rank=rank+1 
     536!        ind=0 
     537!      ENDIF 
     538!    ENDDO 
    433539 
    434540!$OMP PARALLEL 
Note: See TracChangeset for help on using the changeset viewer.