source: codes/icosagcm/devel/src/vertical/vertical_interp.f90 @ 913

Last change on this file since 913 was 913, checked in by dubos, 5 years ago

devel : compute_pression for unstructured mesh

File size: 1.7 KB
Line 
1MODULE vertical_interp_mod
2  USE icosa
3  USE omp_para
4  USE compute_diagnostics_mod
5  IMPLICIT NONE
6  PRIVATE
7 
8!  TYPE(t_field),SAVE, POINTER :: f_p(:)
9 
10
11  PUBLIC init_vertical_interp, vertical_interp, compute_vertical_interp
12
13CONTAINS
14
15  SUBROUTINE init_vertical_interp   
16!    CALL allocate_field(f_p,field_t,type_real,llm+1)
17  END SUBROUTINE init_vertical_interp
18   
19  SUBROUTINE vertical_interp(f_pmid,f_in,f_out,pval)
20    TYPE(t_field),POINTER :: f_pmid(:)
21    TYPE(t_field),POINTER :: f_in(:)
22    TYPE(t_field),POINTER :: f_out(:)
23    REAL(rstd),INTENT(IN) :: pval
24
25    REAL(rstd),POINTER :: in(:,:)
26    REAL(rstd),POINTER :: out(:)
27    REAL(rstd),POINTER :: pmid(:,:)
28   
29    INTEGER :: ind
30       
31    DO ind=1,ndomain
32      IF (.NOT. assigned_domain(ind)) CYCLE
33      CALL swap_dimensions(ind)
34      CALL swap_geometry(ind)
35      pmid=f_pmid(ind)
36      in=f_in(ind)
37      out=f_out(ind)
38      CALL compute_vertical_interp(pmid,in,out,pval)
39    ENDDO
40   
41  END SUBROUTINE  vertical_interp
42
43  SUBROUTINE compute_vertical_interp(pmid,in,out,pval)
44    REAL(rstd),INTENT(IN) :: pmid(iim*jjm,llm)
45    REAL(rstd),INTENT(IN) :: in(iim*jjm,llm)
46    REAL(rstd),INTENT(OUT) :: out(iim*jjm)
47    REAL(rstd) :: pval, coeff
48    INTEGER :: i,j,ij,l
49       
50!$OMP BARRIER   
51    IF (is_omp_level_master) THEN
52   
53      DO j=jj_begin-1,jj_end+1
54        DO i=ii_begin-1,ii_end+1
55          ij=(j-1)*iim+i
56          l=llm-1
57          DO WHILE(pmid(ij,l)<pval .AND. l>1)
58            l=l-1
59          ENDDO
60          coeff=(pval-pmid(ij,l))/(pmid(ij,l)-pmid(ij,l+1))
61          out(ij)=in(ij,l)+coeff*(in(ij,l)-in(ij,l+1))
62        ENDDO
63      ENDDO   
64    ENDIF
65!$OMP BARRIER
66
67  END SUBROUTINE compute_vertical_interp
68
69END MODULE vertical_interp_mod
Note: See TracBrowser for help on using the repository browser.