Ignore:
Timestamp:
03/18/13 15:44:08 (11 years ago)
Author:
ymipsl
Message:

Various optimisations

  • dissipation is not called every timestep (similar way than LMDZ)
  • transfert size of halos has been reduced : need to synchronise redondant data between tiles at itau_sync timestep

YM

File:
1 edited

Legend:

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

    r146 r148  
    3737  TYPE(t_request),POINTER :: req_e1_vect(:) 
    3838   
     39  TYPE(t_request),POINTER :: req_i0(:) 
     40  TYPE(t_request),POINTER :: req_e0_scal(:) 
     41  TYPE(t_request),POINTER :: req_e0_vect(:) 
     42   
    3943   
    4044CONTAINS 
     
    6973     
    7074      DO i=ii_begin,ii_end 
    71         CALL request_add_point(ind,i,jj_begin,req_i1) 
     75!        CALL request_add_point(ind,i,jj_begin,req_i1) 
    7276      ENDDO 
    7377 
    7478      DO j=jj_begin,jj_end 
    75         CALL request_add_point(ind,ii_end,j,req_i1) 
     79!        CALL request_add_point(ind,ii_end,j,req_i1) 
    7680      ENDDO     
    7781     
    7882      DO i=ii_begin,ii_end 
    79         CALL request_add_point(ind,i,jj_end,req_i1) 
     83!        CALL request_add_point(ind,i,jj_end,req_i1) 
    8084      ENDDO     
    8185 
    8286      DO j=jj_begin,jj_end 
    83         CALL request_add_point(ind,ii_begin,j,req_i1) 
     87!        CALL request_add_point(ind,ii_begin,j,req_i1) 
    8488      ENDDO     
    8589     
     
    8791   
    8892    CALL finalize_request(req_i1) 
    89    
     93 
     94 
     95    CALL create_request(field_t,req_i0) 
     96 
     97    DO ind=1,ndomain 
     98      CALL swap_dimensions(ind) 
     99     
     100      DO i=ii_begin,ii_end 
     101        CALL request_add_point(ind,i,jj_begin,req_i0) 
     102      ENDDO 
     103 
     104      DO j=jj_begin,jj_end 
     105        CALL request_add_point(ind,ii_end,j,req_i0) 
     106      ENDDO     
     107     
     108      DO i=ii_begin,ii_end 
     109        CALL request_add_point(ind,i,jj_end,req_i0) 
     110      ENDDO     
     111 
     112      DO j=jj_begin,jj_end 
     113        CALL request_add_point(ind,ii_begin,j,req_i0) 
     114      ENDDO     
     115     
     116    ENDDO 
     117  
     118    CALL finalize_request(req_i0)   
     119 
     120 
    90121    CALL create_request(field_u,req_e1_scal) 
    91122    DO ind=1,ndomain 
     
    112143 
    113144      DO i=ii_begin+1,ii_end-1 
    114         CALL request_add_point(ind,i,jj_begin,req_e1_scal,right) 
    115         CALL request_add_point(ind,i,jj_end,req_e1_scal,right) 
     145!        CALL request_add_point(ind,i,jj_begin,req_e1_scal,right) 
     146!        CALL request_add_point(ind,i,jj_end,req_e1_scal,right) 
    116147      ENDDO 
    117148     
    118149      DO j=jj_begin+1,jj_end-1 
    119         CALL request_add_point(ind,ii_begin,j,req_e1_scal,rup) 
    120         CALL request_add_point(ind,ii_end,j,req_e1_scal,rup) 
     150!        CALL request_add_point(ind,ii_begin,j,req_e1_scal,rup) 
     151!        CALL request_add_point(ind,ii_end,j,req_e1_scal,rup) 
    121152      ENDDO    
    122153 
    123       CALL request_add_point(ind,ii_begin+1,jj_begin,req_e1_scal,left) 
    124       CALL request_add_point(ind,ii_begin,jj_begin+1,req_e1_scal,ldown) 
    125       CALL request_add_point(ind,ii_begin+1,jj_end,req_e1_scal,left) 
    126       CALL request_add_point(ind,ii_end,jj_begin+1,req_e1_scal,ldown) 
     154!      CALL request_add_point(ind,ii_begin+1,jj_begin,req_e1_scal,left) 
     155!      CALL request_add_point(ind,ii_begin,jj_begin+1,req_e1_scal,ldown) 
     156!      CALL request_add_point(ind,ii_begin+1,jj_end,req_e1_scal,left) 
     157!      CALL request_add_point(ind,ii_end,jj_begin+1,req_e1_scal,ldown) 
    127158 
    128159    ENDDO 
    129160 
    130161    CALL finalize_request(req_e1_scal) 
     162 
     163 
     164    CALL create_request(field_u,req_e0_scal) 
     165    DO ind=1,ndomain 
     166      CALL swap_dimensions(ind) 
     167 
     168 
     169      DO i=ii_begin+1,ii_end-1 
     170        CALL request_add_point(ind,i,jj_begin,req_e0_scal,right) 
     171        CALL request_add_point(ind,i,jj_end,req_e0_scal,right) 
     172      ENDDO 
     173     
     174      DO j=jj_begin+1,jj_end-1 
     175        CALL request_add_point(ind,ii_begin,j,req_e0_scal,rup) 
     176        CALL request_add_point(ind,ii_end,j,req_e0_scal,rup) 
     177      ENDDO    
     178 
     179      CALL request_add_point(ind,ii_begin+1,jj_begin,req_e0_scal,left) 
     180      CALL request_add_point(ind,ii_begin,jj_begin+1,req_e0_scal,ldown) 
     181      CALL request_add_point(ind,ii_begin+1,jj_end,req_e0_scal,left) 
     182      CALL request_add_point(ind,ii_end,jj_begin+1,req_e0_scal,ldown) 
     183 
     184    ENDDO 
     185 
     186    CALL finalize_request(req_e0_scal) 
     187 
     188 
    131189     
    132190    CALL create_request(field_u,req_e1_vect,.TRUE.) 
     
    154212 
    155213      DO i=ii_begin+1,ii_end-1 
    156         CALL request_add_point(ind,i,jj_begin,req_e1_vect,right) 
    157         CALL request_add_point(ind,i,jj_end,req_e1_vect,right) 
     214!        CALL request_add_point(ind,i,jj_begin,req_e1_vect,right) 
     215!        CALL request_add_point(ind,i,jj_end,req_e1_vect,right) 
    158216      ENDDO 
    159217     
    160218      DO j=jj_begin+1,jj_end-1 
    161         CALL request_add_point(ind,ii_begin,j,req_e1_vect,rup) 
    162         CALL request_add_point(ind,ii_end,j,req_e1_vect,rup) 
     219!        CALL request_add_point(ind,ii_begin,j,req_e1_vect,rup) 
     220!        CALL request_add_point(ind,ii_end,j,req_e1_vect,rup) 
    163221      ENDDO    
    164222 
    165       CALL request_add_point(ind,ii_begin+1,jj_begin,req_e1_vect,left) 
    166       CALL request_add_point(ind,ii_begin,jj_begin+1,req_e1_vect,ldown) 
    167       CALL request_add_point(ind,ii_begin+1,jj_end,req_e1_vect,left) 
    168       CALL request_add_point(ind,ii_end,jj_begin+1,req_e1_vect,ldown) 
    169  
     223!      CALL request_add_point(ind,ii_begin+1,jj_begin,req_e1_vect,left) 
     224!      CALL request_add_point(ind,ii_begin,jj_begin+1,req_e1_vect,ldown) 
     225!      CALL request_add_point(ind,ii_begin+1,jj_end,req_e1_vect,left) 
     226!      CALL request_add_point(ind,ii_end,jj_begin+1,req_e1_vect,ldown) 
    170227   
    171228    ENDDO   
    172229 
    173230    CALL finalize_request(req_e1_vect) 
     231     
     232     
     233    CALL create_request(field_u,req_e0_vect,.TRUE.) 
     234    DO ind=1,ndomain 
     235      CALL swap_dimensions(ind) 
     236  
     237      DO i=ii_begin+1,ii_end-1 
     238        CALL request_add_point(ind,i,jj_begin,req_e0_vect,right) 
     239        CALL request_add_point(ind,i,jj_end,req_e0_vect,right) 
     240      ENDDO 
     241     
     242      DO j=jj_begin+1,jj_end-1 
     243        CALL request_add_point(ind,ii_begin,j,req_e0_vect,rup) 
     244        CALL request_add_point(ind,ii_end,j,req_e0_vect,rup) 
     245      ENDDO    
     246 
     247      CALL request_add_point(ind,ii_begin+1,jj_begin,req_e0_vect,left) 
     248      CALL request_add_point(ind,ii_begin,jj_begin+1,req_e0_vect,ldown) 
     249      CALL request_add_point(ind,ii_begin+1,jj_end,req_e0_vect,left) 
     250      CALL request_add_point(ind,ii_end,jj_begin+1,req_e0_vect,ldown) 
     251   
     252    ENDDO   
     253 
     254    CALL finalize_request(req_e0_vect) 
     255 
    174256 
    175257  END SUBROUTINE init_transfert 
     
    533615  USE mpi_mod 
    534616  USE mpipara 
     617  USE trace 
    535618  IMPLICIT NONE 
    536619    TYPE(t_field),POINTER :: field(:) 
     
    553636    INTEGER :: dim3,dim4 
    554637 
     638    CALL trace_start("transfert_mpi") 
     639     
    555640    IF (field(1)%data_type==type_real) THEN 
    556641      IF (field(1)%ndim==2) THEN 
     
    747832       
    748833    ENDIF 
     834 
     835    CALL trace_end("transfert_mpi") 
    749836     
    750837  END SUBROUTINE transfert_request_mpi 
Note: See TracChangeset for help on using the changeset viewer.