Ignore:
Timestamp:
10/31/14 14:52:01 (10 years ago)
Author:
ymipsl
Message:

Merging OpenMP parallisme mode : by subdomain and on vertical level.
This feature is actually experimental but may be retro-compatible with the last method based only on subdomain

YM

File:
1 edited

Legend:

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

    r186 r295  
    2121  USE icosa 
    2222  USE pression_mod 
     23  USE omp_para 
    2324  IMPLICIT NONE 
    2425    TYPE(t_field),POINTER :: f_ps(:) 
     
    4849 
    4950  SUBROUTINE compute_vertical_interp(p,in,out,pval) 
     51  USE omp_para 
    5052  IMPLICIT NONE 
    5153    REAL(rstd),INTENT(IN) :: p(iim*jjm,llm+1) 
     
    5658    INTEGER :: i,j,ij,l 
    5759         
    58     DO j=jj_begin-1,jj_end+1 
    59       DO i=ii_begin-1,ii_end+1 
    60         ij=(j-1)*iim+i 
    61         l=llm-1 
    62         DO WHILE(0.5*(p(ij,l)+p(ij,l+1))<pval .AND. l>1) 
    63           l=l-1 
     60!$OMP BARRIER     
     61    IF (is_omp_level_master) THEN 
     62     
     63      DO j=jj_begin-1,jj_end+1 
     64        DO i=ii_begin-1,ii_end+1 
     65          ij=(j-1)*iim+i 
     66          l=llm-1 
     67          DO WHILE(0.5*(p(ij,l)+p(ij,l+1))<pval .AND. l>1) 
     68            l=l-1 
     69          ENDDO 
     70          pmid=0.5*(p(ij,l)+p(ij,l+1)) 
     71          pmidp1=0.5*(p(ij,l+1)+p(ij,l+2)) 
     72 
     73          coeff=(pval-pmid)/(pmid-pmidp1) 
     74         
     75          out(ij)=in(ij,l)+coeff*(in(ij,l)-in(ij,l+1)) 
    6476        ENDDO 
    65         pmid=0.5*(p(ij,l)+p(ij,l+1)) 
    66         pmidp1=0.5*(p(ij,l+1)+p(ij,l+2)) 
    67  
    68         coeff=(pval-pmid)/(pmid-pmidp1) 
    69          
    70         out(ij)=in(ij,l)+coeff*(in(ij,l)-in(ij,l+1)) 
    7177      ENDDO 
    72     ENDDO 
     78    
     79    ENDIF 
     80!$OMP BARRIER     
    7381         
    7482  END SUBROUTINE compute_vertical_interp 
Note: See TracChangeset for help on using the changeset viewer.