Ignore:
Timestamp:
06/06/16 20:41:52 (8 years ago)
Author:
ymipsl
Message:

Prepare DCMIP2016 output by XIOS2

YM

File:
1 edited

Legend:

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

    r295 r397  
    2525   
    2626  END SUBROUTINE pression 
     27 
     28  SUBROUTINE pression_mid(f_ps,f_pmid) 
     29  USE icosa 
     30  IMPLICIT NONE 
     31    TYPE(t_field), POINTER :: f_ps(:) 
     32    TYPE(t_field), POINTER :: f_pmid(:) 
    2733   
     34    REAL(rstd), POINTER :: ps(:) 
     35    REAL(rstd), POINTER :: pmid(:,:) 
     36    INTEGER :: ind 
     37 
     38!$OMP BARRIER 
     39    DO ind=1,ndomain 
     40      IF (.NOT. assigned_domain(ind)) CYCLE 
     41      CALL swap_dimensions(ind) 
     42      CALL swap_geometry(ind) 
     43      ps=f_ps(ind) 
     44      pmid=f_pmid(ind) 
     45      CALL compute_pression_mid(ps, pmid,0) 
     46    ENDDO 
     47!$OMP BARRIER 
     48   
     49  END SUBROUTINE pression_mid 
     50 
    2851  SUBROUTINE compute_pression(ps,p,offset) 
    2952  USE icosa 
     
    4972 
    5073  END SUBROUTINE compute_pression 
     74   
     75  SUBROUTINE compute_pression_mid(ps,pmid,offset) 
     76  USE icosa 
     77  USE disvert_mod 
     78  USE omp_para 
     79  IMPLICIT NONE 
     80    REAL(rstd),INTENT(IN) :: ps(iim*jjm) 
     81    REAL(rstd),INTENT(OUT) :: pmid(iim*jjm,llm) 
     82    INTEGER,INTENT(IN) :: offset 
     83    INTEGER :: i,j,ij,l 
     84 
     85    IF(ap_bp_present) THEN 
     86      DO    l    = ll_begin, ll_end 
     87        DO j=jj_begin-offset,jj_end+offset 
     88          DO i=ii_begin-offset,ii_end+offset 
     89            ij=(j-1)*iim+i 
     90            pmid(ij,l) = 0.5*(ap(l)+ap(l+1) + (bp(l)+bp(l+1)) * ps(ij)) 
     91          ENDDO 
     92        ENDDO 
     93      ENDDO 
     94    END IF 
     95 
     96  END SUBROUTINE compute_pression_mid 
    5197 
    5298END MODULE pression_mod 
Note: See TracChangeset for help on using the changeset viewer.