source: codes/icosagcm/trunk/src/pression.f90 @ 252

Last change on this file since 252 was 186, checked in by ymipsl, 10 years ago

Add new openMP parallelism based on distribution of domains on threads. There is no more limitation of number of threads by MPI process.

YM

File size: 1.0 KB
RevLine 
[12]1MODULE pression_mod
2
3CONTAINS
4
5  SUBROUTINE pression(f_ps,f_p)
[19]6  USE icosa
[12]7  IMPLICIT NONE
8    TYPE(t_field), POINTER :: f_ps(:)
9    TYPE(t_field), POINTER :: f_p(:)
10 
11    REAL(rstd), POINTER :: ps(:)
12    REAL(rstd), POINTER :: p(:,:)
13    INTEGER :: ind
14
15    DO ind=1,ndomain
[186]16      IF (.NOT. assigned_domain(ind)) CYCLE
[12]17      CALL swap_dimensions(ind)
18      CALL swap_geometry(ind)
19      ps=f_ps(ind)
20      p=f_p(ind)
21      CALL compute_pression(ps, p,0)
22    ENDDO
23 
24  END SUBROUTINE pression
25 
26  SUBROUTINE compute_pression(ps,p,offset)
[19]27  USE icosa
[12]28  USE disvert_mod
29  IMPLICIT NONE
30    REAL(rstd),INTENT(IN) :: ps(iim*jjm)
31    REAL(rstd),INTENT(OUT) :: p(iim*jjm,llm+1)
32    INTEGER,INTENT(IN) :: offset
33    INTEGER :: i,j,ij,l
34
[166]35    IF(ap_bp_present) THEN
[12]36    DO    l    = 1, llm+1
37      DO j=jj_begin-offset,jj_end+offset
38        DO i=ii_begin-offset,ii_end+offset
39          ij=(j-1)*iim+i
40          p(ij,l) = ap(l) + bp(l) * ps(ij)
41        ENDDO
42      ENDDO
43    ENDDO
[166]44    END IF
[12]45  END SUBROUTINE compute_pression
46
47END MODULE pression_mod
Note: See TracBrowser for help on using the repository browser.