Ignore:
Timestamp:
08/07/12 19:10:05 (12 years ago)
Author:
ymipsl
Message:

Correction for dcmip moist physics
Temperature is ouput instead of virtual temperature.

YM

File:
1 edited

Legend:

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

    r104 r110  
    7474  END SUBROUTINE check_mass_conservation 
    7575   
    76   SUBROUTINE caldyn(it,f_phis, f_ps, f_theta_rhodz, f_u, f_dps, f_dtheta_rhodz, f_du) 
     76  SUBROUTINE caldyn(it,f_phis, f_ps, f_theta_rhodz, f_u, f_q, f_dps, f_dtheta_rhodz, f_du) 
    7777  USE icosa 
    7878  USE vorticity_mod 
     
    8585  TYPE(t_field),POINTER :: f_theta_rhodz(:) 
    8686  TYPE(t_field),POINTER :: f_u(:) 
     87  TYPE(t_field),POINTER :: f_q(:) 
    8788  TYPE(t_field),POINTER :: f_dps(:) 
    8889  TYPE(t_field),POINTER :: f_dtheta_rhodz(:) 
     
    123124    IF (mod(it,itau_out)==0 ) THEN 
    124125       PRINT *,'CALL write_output_fields' 
    125        CALL write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, & 
     126       CALL write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, & 
    126127            f_buf_i, f_buf_v, f_buf_u3d, f_buf_ulon, f_buf_ulat, f_buf_s, f_buf_p) 
    127128    END IF 
     
    626627  END SUBROUTINE compute_caldyn 
    627628   
    628   SUBROUTINE write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, & 
     629  SUBROUTINE write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, & 
    629630       f_buf_i, f_buf_v, f_buf_i3, f_buf1_i, f_buf2_i, f_buf_s, f_buf_p) 
    630631    USE icosa 
     
    635636    USE write_field 
    636637    USE vertical_interp_mod 
    637     TYPE(t_field),POINTER :: f_ps(:), f_phis(:), f_u(:), f_theta_rhodz(:), f_dps(:), & 
     638    TYPE(t_field),POINTER :: f_ps(:), f_phis(:), f_u(:), f_theta_rhodz(:), f_q(:), f_dps(:), & 
    638639         f_buf_i(:), f_buf_v(:), f_buf_i3(:), f_buf1_i(:), f_buf2_i(:), f_buf_s(:), f_buf_p(:) 
    639640     
    640641    REAL(rstd) :: out_pression_lev 
    641642    CHARACTER(LEN=255) :: str_pression 
     643    CHARACTER(LEN=255) :: physics_type 
    642644     
    643645    out_pression_level=0 
     
    661663    ! Temperature 
    662664    CALL theta_rhodz2temperature(f_ps,f_theta_rhodz,f_buf_i) ; 
    663     CALL writefield("T",f_buf_i) 
    664      
    665     IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
    666       CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 
    667       CALL writefield("T"//TRIM(str_pression),f_buf_s) 
     665     
     666    CALL getin('physics',physics_type) 
     667    IF (TRIM(physics_type)=='dcmip') THEN 
     668      CALL Tv2T(f_buf_i,f_q,f_buf1_i)  
     669      CALL writefield("T",f_buf1_i) 
     670      IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
     671        CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level) 
     672        CALL writefield("T"//TRIM(str_pression),f_buf_s) 
     673      ENDIF 
     674    ELSE 
     675      CALL writefield("T",f_buf_i) 
     676      IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
     677        CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 
     678        CALL writefield("T"//TRIM(str_pression),f_buf_s) 
     679      ENDIF 
    668680    ENDIF 
    669      
     681    
    670682    ! velocity components 
    671683    CALL un2ulonlat(f_u, f_buf_i3, f_buf1_i, f_buf2_i) 
     
    739751    END DO 
    740752  END SUBROUTINE un2ulonlat 
    741   
     753 
     754  SUBROUTINE Tv2T(f_Tv, f_q, f_T) 
     755  USE icosa 
     756  IMPLICIT NONE 
     757    TYPE(t_field), POINTER :: f_TV(:) 
     758    TYPE(t_field), POINTER :: f_q(:) 
     759    TYPE(t_field), POINTER :: f_T(:) 
     760     
     761    REAL(rstd),POINTER :: Tv(:,:), q(:,:,:), T(:,:) 
     762    INTEGER :: ind 
     763     
     764    DO ind=1,ndomain 
     765       CALL swap_dimensions(ind) 
     766       CALL swap_geometry(ind) 
     767       Tv=f_Tv(ind) 
     768       q=f_q(ind) 
     769       T=f_T(ind) 
     770       T=Tv/(1+0.608*q(:,:,1)) 
     771    END DO 
     772     
     773  END SUBROUTINE Tv2T 
     774   
    742775END MODULE caldyn_gcm_mod 
Note: See TracChangeset for help on using the changeset viewer.