Ignore:
Timestamp:
07/10/19 16:31:55 (5 years ago)
Author:
jisesh
Message:

devel: Nudging external data and vertical interpolatiion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/vertical/vertical_remap.f90

    r913 r947  
    44  IMPLICIT NONE 
    55  PRIVATE 
     6PUBLIC vertical_remap_extdata,compute_vertical_remap_extdata 
    67 
    78  PUBLIC :: vertical_remap 
     
    107108  END SUBROUTINE compute_vertical_remap 
    108109 
     110  SUBROUTINE vertical_remap_extdata(field_in,f_target_pressure,field_out) 
     111  USE icosa 
     112  USE pression_mod 
     113  USE omp_para 
     114  USE disvert_mod, ONLY : presnivs 
     115 
     116  IMPLICIT NONE 
     117    TYPE(t_field),POINTER :: field_in(:)  
     118    TYPE(t_field),POINTER :: field_out(:) 
     119    TYPE(t_field),POINTER :: f_target_pressure(:) 
     120 
     121    REAL(rstd),POINTER :: target_pressure(:,:) 
     122    REAL(rstd),POINTER :: in(:,:) 
     123    REAL(rstd),POINTER :: out(:,:) 
     124    INTEGER :: ind 
     125 
     126    DO ind=1,ndomain 
     127      IF (.NOT. assigned_domain(ind)) CYCLE 
     128      CALL swap_dimensions(ind) 
     129      CALL swap_geometry(ind) 
     130      in=field_in(ind) 
     131      out=field_out(ind) 
     132      target_pressure=f_target_pressure(ind) 
     133      CALL compute_vertical_remap_extdata(in,target_pressure,out) 
     134    ENDDO 
     135 
     136  END SUBROUTINE vertical_remap_extdata 
     137 
     138  SUBROUTINE compute_vertical_remap_extdata(in,target_pressure,out2d_press) 
     139  USE omp_para 
     140  USE disvert_mod, ONLY : presnivs  
     141  IMPLICIT NONE 
     142    REAL(rstd),INTENT(IN)  :: in(:,:) 
     143    REAL(rstd),INTENT(IN)  :: target_pressure(iim*jjm,llm+1)  
     144    REAL(rstd),INTENT(OUT) :: out2d_press(iim*jjm,llm+1) 
     145    REAL(rstd) :: coeff, target_pval,testp1,testp2 
     146    INTEGER :: i,j,ij,l,n,nb_level 
     147    INTEGER :: a 
     148    INTEGER :: b 
     149    LOGICAL :: positive 
     150    
     151    nb_level=size(presnivs) 
     152 !$OMP BARRIER     
     153    IF (is_omp_level_master) THEN 
     154    DO l=1,llm 
     155      DO j=jj_begin,jj_end 
     156        DO i=ii_begin,ii_end 
     157          ij=(j-1)*iim+i 
     158          target_pval=target_pressure(ij,l) 
     159            a=0 
     160            DO n=1,nb_level-1 
     161              IF ( (target_pval<=presnivs(n) .AND. target_pval>=presnivs(n+1))) THEN 
     162               testp1=presnivs(n); testp2=presnivs(n+1) 
     163               a=n ; b=n+1 ; EXIT 
     164              ENDIF 
     165            ENDDO 
     166            IF (a==0) THEN 
     167              IF (target_pval>=presnivs(1)) THEN 
     168                a=1 ; b=2 
     169              ELSE 
     170                a=nb_level-1 ; b=nb_level 
     171              ENDIF 
     172            ENDIF 
     173 
     174          coeff=(target_pval-presnivs(a))/(presnivs(a)-presnivs(b)) 
     175          out2d_press(ij,l)=in(ij,a)+coeff*(in(ij,a)-in(ij,b)) 
     176        ENDDO 
     177      ENDDO 
     178    ENDDO 
     179 
     180    ENDIF 
     181 !$OMP BARRIER     
     182 
     183  END SUBROUTINE compute_vertical_remap_extdata 
     184 
     185 
     186 
    109187END MODULE vertical_remap_mod 
Note: See TracChangeset for help on using the changeset viewer.