Ignore:
Timestamp:
06/14/16 21:54:26 (8 years ago)
Author:
dubos
Message:

theta-related cleanup

File:
1 edited

Legend:

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

    r418 r428  
    158158  END SUBROUTINE write_output_fields_basic 
    159159   
    160   SUBROUTINE write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, & 
    161        f_buf_i, f_buf_v, f_buf_i3, f_buf1_i, f_buf2_i, f_buf_s, f_buf_p) 
    162     USE vorticity_mod 
    163     USE theta2theta_rhodz_mod 
    164     USE pression_mod 
    165     USE omega_mod 
    166     USE write_field_mod 
    167     USE vertical_interp_mod 
    168     USE wind_mod 
    169     TYPE(t_field),POINTER :: f_ps(:), f_phis(:), f_u(:), f_theta_rhodz(:), f_q(:), f_dps(:), & 
    170          f_buf_i(:), f_buf_v(:), f_buf_i3(:), f_buf1_i(:), f_buf2_i(:), f_buf_s(:), f_buf_p(:) 
    171      
    172     REAL(rstd) :: out_pression_level 
    173     CHARACTER(LEN=255) :: str_pression 
    174     CHARACTER(LEN=255) :: physics_type 
    175      
    176     out_pression_level=0. 
    177     CALL getin("out_pression_level",out_pression_level)  
    178     WRITE(str_pression,*) INT(out_pression_level/100) 
    179     str_pression=ADJUSTL(str_pression) 
    180      
    181     CALL writefield("ps",f_ps) 
    182     CALL writefield("dps",f_dps) 
    183     CALL writefield("phis",f_phis) 
    184     CALL vorticity(f_u,f_buf_v) 
    185     CALL writefield("vort",f_buf_v) 
    186  
    187     CALL w_omega(f_ps, f_u, f_buf_i) 
    188     CALL writefield('omega', f_buf_i) 
    189     IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
    190       CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 
    191       CALL writefield("omega"//TRIM(str_pression),f_buf_s) 
    192     ENDIF 
    193      
    194     ! Temperature 
    195 !    CALL theta_rhodz2temperature(f_ps,f_theta_rhodz,f_buf_i) ; ! FIXME 
    196       
    197     CALL getin('physics',physics_type) 
    198     IF (TRIM(physics_type)=='dcmip') THEN 
    199       CALL Tv2T(f_buf_i,f_q,f_buf1_i)  
    200       CALL writefield("T",f_buf1_i) 
    201       IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
    202         CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level) 
    203         CALL writefield("T"//TRIM(str_pression),f_buf_s) 
    204       ENDIF 
    205     ELSE 
    206       CALL writefield("T",f_buf_i) 
    207       IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
    208         CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 
    209         CALL writefield("T"//TRIM(str_pression),f_buf_s) 
    210       ENDIF 
    211     ENDIF 
    212     
    213     ! velocity components 
    214     CALL un2ulonlat(f_u, f_buf1_i, f_buf2_i) 
    215     CALL writefield("ulon",f_buf1_i) 
    216     CALL writefield("ulat",f_buf2_i) 
    217  
    218     IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
    219       CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level) 
    220       CALL writefield("ulon"//TRIM(str_pression),f_buf_s) 
    221       CALL vertical_interp(f_ps,f_buf2_i,f_buf_s,out_pression_level) 
    222       CALL writefield("ulat"//TRIM(str_pression),f_buf_s) 
    223     ENDIF 
    224      
    225     ! geopotential ! FIXME 
    226     CALL thetarhodz2geopot(f_ps,f_phis,f_theta_rhodz, f_buf_s,f_buf_p,f_buf1_i,f_buf2_i,f_buf_i) 
    227     CALL writefield("p",f_buf_p) 
    228 !    CALL writefield("phi",f_geopot)   ! geopotential 
    229     CALL writefield("theta",f_buf1_i) ! potential temperature 
    230     CALL writefield("pk",f_buf2_i)    ! Exner pressure 
    231    
    232   END SUBROUTINE write_output_fields 
    233  
    234 !------------------- Conversion from prognostic to observable variables ------------------ 
     160 !------------------- Conversion from prognostic to observable variables ------------------ 
    235161 
    236162  SUBROUTINE progonostic_vel_to_horiz(f_geopot, f_ps, f_rhodz, f_u, f_W, f_uh, f_uz) 
     
    308234  END SUBROUTINE compute_prognostic_vel_to_horiz 
    309235 
    310   SUBROUTINE thetarhodz2geopot(f_ps,f_phis,f_theta_rhodz, f_pks,f_p,f_theta,f_pk,f_phi)  
    311     USE field_mod 
    312     USE pression_mod 
    313     USE exner_mod 
    314     USE geopotential_mod 
    315     USE theta2theta_rhodz_mod 
    316     TYPE(t_field), POINTER :: f_ps(:), f_phis(:), f_theta_rhodz(:), &  ! IN 
    317          f_pks(:), f_p(:), f_theta(:), f_pk(:), f_phi(:)               ! OUT 
    318     REAL(rstd),POINTER :: pk(:,:), p(:,:), theta(:,:), theta_rhodz(:,:,:), & 
    319          phi(:,:), phis(:), ps(:), pks(:) 
    320     INTEGER :: ind 
    321      
    322     DO ind=1,ndomain 
    323        IF (.NOT. assigned_domain(ind)) CYCLE 
    324        CALL swap_dimensions(ind) 
    325        CALL swap_geometry(ind) 
    326        ps = f_ps(ind) 
    327        p  = f_p(ind) 
    328 !$OMP BARRIER 
    329        CALL compute_pression(ps,p,0) 
    330        pk = f_pk(ind) 
    331        pks = f_pks(ind) 
    332 !$OMP BARRIER 
    333        CALL compute_exner(ps,p,pks,pk,0) 
    334 !$OMP BARRIER 
    335        theta_rhodz = f_theta_rhodz(ind) 
    336        theta = f_theta(ind) 
    337        CALL compute_theta_rhodz2theta(ps, theta_rhodz(:,:,1),theta,0) 
    338        phis = f_phis(ind) 
    339        phi = f_phi(ind) 
    340        CALL compute_geopotential(phis,pks,pk,theta,phi,0) 
    341     END DO 
    342  
    343   END SUBROUTINE thetarhodz2geopot 
    344    
    345236  SUBROUTINE Tv2T(f_Tv, f_q, f_T) 
    346237    TYPE(t_field), POINTER :: f_TV(:) 
Note: See TracChangeset for help on using the changeset viewer.