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/observable.f90

    r387 r397  
    1010  TYPE(t_field),POINTER, SAVE :: f_buf1_i(:), f_buf2_i(:) 
    1111  TYPE(t_field),POINTER, SAVE :: f_buf_v(:), f_buf_s(:), f_buf_p(:) 
     12  TYPE(t_field),POINTER, SAVE :: f_pmid(:) 
    1213 
    1314! temporary shared variable for caldyn 
     
    1516 
    1617  PUBLIC init_observable, write_output_fields_basic, f_theta 
    17  
     18  LOGICAL,SAVE :: first_output=.TRUE. 
     19!$OMP THREADPRIVATE(first_output) 
     20   
    1821CONTAINS 
    1922   
    2023  SUBROUTINE init_observable 
    2124    CALL allocate_field(f_buf_i,   field_t,type_real,llm,name="buffer_i") 
     25    CALL allocate_field(f_buf1_i,   field_t,type_real,llm,name="buffer1_i") 
     26    CALL allocate_field(f_buf2_i,   field_t,type_real,llm,name="buffer2_i") 
    2227    CALL allocate_field(f_buf_p,   field_t,type_real,llm+1)  
    2328    CALL allocate_field(f_buf_u3d, field_t,type_real,3,llm)  ! 3D vel at cell centers 
     
    2934 
    3035    CALL allocate_field(f_theta, field_t,type_real,llm,  name='theta')   ! potential temperature 
     36    CALL allocate_field(f_pmid,  field_t,type_real,llm,  name='pmid')   ! mid layer pressure 
    3137  END SUBROUTINE init_observable 
    3238   
    33   SUBROUTINE write_output_fields_basic(f_ps, f_mass, f_geopot, f_u, f_W, f_q) 
     39  SUBROUTINE write_output_fields_basic(f_ps, f_mass, f_geopot, f_theta_rhodz, f_u, f_W, f_q) 
    3440    USE wind_mod 
    3541    USE output_field_mod 
    3642    USE omp_para 
    37     TYPE(t_field),POINTER :: f_ps(:), f_mass(:), f_geopot(:), f_u(:), f_W(:), f_q(:) 
     43    USE time_mod 
     44    USE xios 
     45    USE disvert_mod 
     46    USE earth_const 
     47    USE pression_mod 
     48    USE vertical_interp_mod 
     49    USE theta2theta_rhodz_mod 
     50    USE wind_mod 
     51    USE omega_mod 
     52     
     53    TYPE(t_field),POINTER :: f_ps(:), f_mass(:), f_geopot(:), f_theta_rhodz(:), f_u(:), f_W(:), f_q(:) 
    3854!    IF (is_master) PRINT *,'CALL write_output_fields_basic' 
     55    REAL :: scalar(1) 
     56    REAL :: mid_ap(llm) 
     57    REAL :: mid_bp(llm) 
     58    INTEGER :: l 
     59 
     60    IF (first_output) THEN 
     61      scalar(1)=dt 
     62      CALL xios_send_field("timestep", scalar) 
     63      scalar(1)=preff 
     64      CALL xios_send_field("preff", scalar) 
     65      CALL xios_send_field("ap",ap) 
     66      CALL xios_send_field("bp",bp) 
     67      DO l=1,llm 
     68        mid_ap(l)=(ap(l)+ap(l+1))/2 
     69        mid_bp(l)=(bp(l)+bp(l+1))/2 
     70      ENDDO 
     71      CALL xios_send_field("mid_ap",mid_ap) 
     72      CALL xios_send_field("mid_bp",mid_bp) 
     73         
     74      first_output=.FALSE. 
     75    ENDIF 
     76     
    3977    CALL progonostic_vel_to_horiz(f_geopot, f_ps, f_mass, f_u, f_W, f_buf_uh, f_buf_i) 
    4078    CALL transfert_request(f_buf_uh,req_e1_vect)  
    4179    CALL output_field("uz",f_buf_i) 
     80    CALL vertical_interp(f_ps,f_buf_i,f_buf_s,85000.) 
     81    CALL output_field("w850",f_buf_s) 
     82    CALL vertical_interp(f_ps,f_buf_i,f_buf_s,50000.) 
     83    CALL output_field("w500",f_buf_s) 
     84     
     85     
    4286    CALL un2ulonlat(f_buf_uh, f_buf_ulon, f_buf_ulat) 
    4387    CALL output_field("ulon",f_buf_ulon) 
     
    4589    CALL output_field("ps",f_ps) 
    4690    CALL output_field("Ai",geom%Ai) 
     91 
    4792    !       CALL output_field("dps",f_dps) 
    4893    CALL output_field("mass",f_mass) 
     
    5095    !       CALL output_field("dmass",f_dmass) 
    5196    !       CALL output_field("vort",f_qv) 
    52     CALL output_field("theta",f_theta) 
     97     
     98     
     99    CALL theta_rhodz2temperature(f_ps,f_theta_rhodz,f_buf_i) ;  
     100    CALL Tv2T(f_buf_i,f_q,f_buf1_i)  
     101    CALL output_field("temp",f_buf_i) 
     102    CALL vertical_interp(f_ps,f_buf_i,f_buf_s,85000.) 
     103    CALL output_field("t850",f_buf_s) 
     104    CALL vertical_interp(f_ps,f_buf_i,f_buf_s,50000.) 
     105    CALL output_field("t500",f_buf_s) 
     106    CALL vertical_interp(f_ps,f_buf_i,f_buf_s,preff) 
     107    CALL output_field("SST",f_buf_s) 
     108 
     109 
     110    CALL extract_slice(f_theta_rhodz, f_buf_i,1) 
     111    CALL output_field("theta",f_buf_i) 
     112            
    53113    !       CALL output_field("exner",f_pk) 
    54114    !       CALL output_field("pv",f_qv) 
    55115    CALL output_field("q",f_q) 
     116    CALL pression_mid(f_ps, f_pmid) 
     117    CALL output_field("p",f_pmid) 
     118 
     119    CALL vertical_interp(f_ps,f_buf_ulon,f_buf_s,85000.) 
     120    CALL output_field("u850",f_buf_s) 
     121    CALL vertical_interp(f_ps,f_buf_ulon,f_buf_s,50000.) 
     122    CALL output_field("u500",f_buf_s) 
     123 
     124    CALL vertical_interp(f_ps,f_buf_ulat,f_buf_s,85000.) 
     125    CALL output_field("v850",f_buf_s) 
     126    CALL vertical_interp(f_ps,f_buf_ulat,f_buf_s,50000.) 
     127    CALL output_field("v500",f_buf_s) 
     128     
     129    CALL w_omega(f_ps, f_u, f_buf_i) 
     130    CALL output_field("omega",f_buf_i) 
     131    CALL vertical_interp(f_ps,f_buf_i,f_buf_s,85000.) 
     132    CALL output_field("omega850",f_buf_s) 
     133    CALL vertical_interp(f_ps,f_buf_i,f_buf_s,50000.) 
     134    CALL output_field("omega500",f_buf_s) 
     135 
     136 
     137     
    56138  END SUBROUTINE write_output_fields_basic 
    57139   
Note: See TracChangeset for help on using the changeset viewer.