Changeset 110


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

Location:
codes/icosagcm/trunk/src
Files:
6 edited

Legend:

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

    r98 r110  
    22  USE icosa 
    33  PRIVATE 
    4   INTEGER,PARAMETER::iapp_tracvl= 3 
     4  INTEGER,PARAMETER::iapp_tracvl= 1 
    55 
    66  TYPE(t_field),POINTER :: f_normal(:) 
  • codes/icosagcm/trunk/src/caldyn.f90

    r98 r110  
    3030  END SUBROUTINE init_caldyn 
    3131   
    32   SUBROUTINE caldyn(it,f_phis, f_ps, f_theta_rhodz, f_u, f_dps, f_dtheta_rhodz, f_du) 
     32  SUBROUTINE caldyn(it,f_phis, f_ps, f_theta_rhodz, f_u, f_q, f_dps, f_dtheta_rhodz, f_du) 
    3333  USE icosa 
    3434  USE caldyn_gcm_mod, ONLY : caldyn_gcm=>caldyn 
     
    4040  TYPE(t_field),POINTER :: f_theta_rhodz(:) 
    4141  TYPE(t_field),POINTER :: f_u(:) 
     42  TYPE(t_field),POINTER :: f_q(:) 
    4243  TYPE(t_field),POINTER :: f_dps(:) 
    4344  TYPE(t_field),POINTER :: f_dtheta_rhodz(:) 
     
    4647    SELECT CASE (TRIM(caldyn_type)) 
    4748      CASE('gcm') 
    48         CALL caldyn_gcm(it,f_phis, f_ps, f_theta_rhodz, f_u, f_dps, f_dtheta_rhodz, f_du) 
     49        CALL caldyn_gcm(it,f_phis, f_ps, f_theta_rhodz, f_u, f_q, f_dps, f_dtheta_rhodz, f_du) 
    4950      CASE('adv') 
    50         CALL caldyn_adv(it,f_phis, f_ps, f_theta_rhodz, f_u, f_dps, f_dtheta_rhodz, f_du) 
     51        CALL caldyn_adv(it,f_phis, f_ps, f_theta_rhodz, f_u, f_q, f_dps, f_dtheta_rhodz, f_du) 
    5152    END SELECT 
    5253   
  • codes/icosagcm/trunk/src/caldyn_adv.f90

    r98 r110  
    7979   
    8080   
    81   SUBROUTINE caldyn(it,f_phis, f_ps, f_theta_rhodz, f_u, f_dps, f_dtheta_rhodz, f_du) 
     81  SUBROUTINE caldyn(it,f_phis, f_ps, f_theta_rhodz, f_u, f_q, f_dps, f_dtheta_rhodz, f_du) 
    8282  USE icosa 
    8383  USE vorticity_mod 
     
    9090  TYPE(t_field),POINTER :: f_theta_rhodz(:) 
    9191  TYPE(t_field),POINTER :: f_u(:) 
     92  TYPE(t_field),POINTER :: f_q(:) 
    9293  TYPE(t_field),POINTER :: f_dps(:) 
    9394  TYPE(t_field),POINTER :: f_dtheta_rhodz(:) 
  • 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 
  • codes/icosagcm/trunk/src/physics_dcmip.f90

    r106 r110  
    172172     
    173173!    q=0 
    174     out_i=T 
     174!    out_i=T 
    175175     
    176176    CALL simple_physics(iim*jjm, llm, dt, lat, tfi, qfi , ufi, vfi, pmid, pint, pdel, 1/pdel, ps, precl, testcase)  
     
    198198    ENDDO        
    199199 
    200     out_i=q 
     200!    out_i=q 
    201201         
    202202    utemp=utemp-u 
     
    496496         do i=1,pcols 
    497497            qsat = epsilo*e0/pmid(i,k)*exp(-latvap/rh2o*((1._r8/t(i,k))-1._r8/T0))  ! saturation specific humidity 
     498            out_i(i,llm+1-k)=q(i,k)-qsat 
    498499            if (q(i,k) > qsat) then                                                 ! saturated? 
    499500               tmp  = 1._r8/dtime*(q(i,k)-qsat)/(1._r8+(latvap/cpair)*(epsilo*latvap*qsat/(rair*t(i,k)**2))) 
  • codes/icosagcm/trunk/src/timeloop_gcm.f90

    r109 r110  
    114114     
    115115    CALL guided(it*dt,f_ps,f_theta_rhodz,f_u,f_q) 
    116     CALL caldyn(it,f_phis,f_ps,f_theta_rhodz,f_u, f_dps, f_dtheta_rhodz, f_du) 
     116    CALL caldyn(it,f_phis,f_ps,f_theta_rhodz,f_u, f_q, f_dps, f_dtheta_rhodz, f_du) 
    117117    CALL advect_tracer(f_ps,f_u,f_q) 
    118     CALL physics(it,f_phis, f_ps, f_theta_rhodz, f_u, f_q) 
    119118     
    120119    SELECT CASE (TRIM(scheme)) 
     
    138137         
    139138    END SELECT 
     139 
     140    CALL physics(it,f_phis, f_ps, f_theta_rhodz, f_u, f_q) 
    140141     
    141142 ENDDO 
Note: See TracChangeset for help on using the changeset viewer.