Ignore:
Timestamp:
07/18/14 18:37:19 (10 years ago)
Author:
ymipsl
Message:

Fix openMP lmdz generic physics interface
YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src/physics_lmdz_generic.f90

    r221 r239  
    3030  REAL :: year_length 
    3131   
     32 INTEGER,ALLOCATABLE,SAVE :: domain_offset(:) 
     33 
    3234   
    3335 
     
    5658    CALL getin('year_length',year_length) 
    5759 
     60!$OMP PARALLEL 
    5861    CALL allocate_field(f_p,field_t,type_real,llm+1) 
    5962    CALL allocate_field(f_pks,field_t,type_real) 
     
    7174    CALL allocate_field(f_dps,field_t,type_real) 
    7275    CALL allocate_field(f_duc,field_t,type_real,3,llm)     
    73      
     76!$OMP END PARALLEL     
     77 
     78    ALLOCATE(domain_offset(ndomain)) 
    7479    nbp_phys=0 
     80    domain_offset(1)=0 
    7581    DO ind=1,ndomain 
    7682      CALL swap_dimensions(ind) 
     83      IF (ind<ndomain) THEN  
     84        domain_offset(ind+1)=domain_offset(ind)+ii_nb*jj_nb 
     85      ENDIF 
    7786      nbp_phys=nbp_phys+ii_nb*jj_nb 
    7887    ENDDO 
     
    107116  USE disvert_mod 
    108117  USE transfert_mod 
     118  USE mpipara 
    109119  IMPLICIT NONE 
    110120    INTEGER,INTENT(IN)    :: it 
     
    160170    REAL(rstd) :: day 
    161171    REAL(rstd) :: real_time 
    162      
    163     INTEGER,SAVE :: offset 
    164 !$OMP THREADPRIVATE(offset) 
     172    INTEGER    :: offset 
    165173    LOGICAL :: lafin=.FALSE. 
    166174    LOGICAL,SAVE :: first=.TRUE. 
     
    187195      ALLOCATE(dq_phy(nbp_phys,llm,nqtot)) 
    188196      ALLOCATE(dps_phy(nbp_phys)) 
     197       
    189198!$OMP END MASTER 
    190199!$OMP BARRIER 
     
    199208    day  = INT( MODULO(real_time,year_length) / day_length)  
    200209    time = MODULO(real_time,day_length) / day_length 
    201      
     210 
     211!$OMP MASTER     
     212    IF (is_mpi_root) PRINT*,"Enterring in physic : day", day, "  time : ",time  
     213!$OMP END MASTER     
    202214     
    203215     
     
    205217     
    206218    CALL transfert_message(f_u,req_u) 
    207     offset=0 
    208219     
    209220    DO ind=1,ndomain 
    210221      CALL swap_dimensions(ind) 
    211222      IF (assigned_domain(ind)) THEN 
     223        offset=domain_offset(ind) 
    212224        CALL swap_geometry(ind) 
    213225       
     
    248260 
    249261!$OMP BARRIER                        
    250     offset=0  
    251262 
    252263    DO ind=1,ndomain 
     
    254265      IF (assigned_domain(ind)) THEN 
    255266        CALL swap_geometry(ind) 
     267        offset=domain_offset(ind) 
    256268       
    257269        theta_rhodz=f_theta_rhodz(ind) 
     
    489501 
    490502   DO l = 2, llm 
    491 !$OMP DO 
    492503     DO j=jj_begin,jj_end 
     504! ---> Bug compilo intel ici en openmp 
     505! ---> Couper la boucle 
     506       if (j==jj_end+1) PRINT*,"this message must not be printed" 
    493507       DO i=ii_begin,ii_end 
    494508         ij=(j-1)*iim+i 
Note: See TracChangeset for help on using the changeset viewer.