Changeset 354


Ignore:
Timestamp:
08/06/15 10:51:35 (9 years ago)
Author:
dubos
Message:

Moved output of dyn fields out of caldyn_gcm

Location:
codes/icosagcm/trunk/src
Files:
1 added
3 edited

Legend:

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

    r350 r354  
    1010  !$OMP THREADPRIVATE(out_u, p, qu) 
    1111 
    12   TYPE(t_field),POINTER :: f_buf_i(:), f_buf_ulon(:), f_buf_ulat(:), f_buf_u3d(:) 
    13   TYPE(t_field),POINTER :: f_buf_v(:), f_buf_s(:), f_buf_p(:) 
    14  
    1512! temporary shared variable for caldyn 
    16   TYPE(t_field),POINTER :: f_theta(:) 
    1713  TYPE(t_field),POINTER :: f_pk(:) 
    1814  TYPE(t_field),POINTER :: f_wwuu(:) 
     
    2420  TYPE(t_message) :: req_ps, req_mass, req_theta_rhodz, req_u, req_qu 
    2521 
    26   PUBLIC init_caldyn, caldyn_BC, caldyn, write_output_fields, & 
    27        req_ps, req_mass 
     22  PUBLIC init_caldyn, caldyn_BC, caldyn, req_ps, req_mass 
    2823 
    2924CONTAINS 
     
    3126  SUBROUTINE init_caldyn 
    3227    USE icosa 
    33     USE exner_mod 
     28    USE observable_mod 
     29!    USE exner_mod 
    3430    USE mpipara 
    3531    USE omp_para 
     
    7268    CALL allocate_field(f_qu,field_u,type_real,llm)  
    7369    CALL allocate_field(f_qv,field_z,type_real,llm)  
    74    
    75     CALL allocate_field(f_buf_i,   field_t,type_real,llm,name="buffer_i") 
    76     CALL allocate_field(f_buf_p,   field_t,type_real,llm+1)  
    77     CALL allocate_field(f_buf_u3d, field_t,type_real,3,llm)  ! 3D vel at cell centers 
    78     CALL allocate_field(f_buf_ulon,field_t,type_real,llm) 
    79     CALL allocate_field(f_buf_ulat,field_t,type_real,llm) 
    80     CALL allocate_field(f_buf_v,   field_z,type_real,llm) 
    81     CALL allocate_field(f_buf_s,   field_t,type_real) 
    82  
    83     CALL allocate_field(f_theta, field_t,type_real,llm,  name='theta')   ! potential temperature 
    8470    CALL allocate_field(f_pk,    field_t,type_real,llm,  name='pk') 
    8571    CALL allocate_field(f_wwuu,  field_u,type_real,llm+1,name='wwuu') 
     
    134120       f_geopot, f_hflux, f_wflux, f_dps, f_dmass, f_dtheta_rhodz, f_du) 
    135121    USE icosa 
     122    USE observable_mod 
    136123    USE disvert_mod, ONLY : caldyn_eta, eta_mass 
    137124    USE vorticity_mod 
     
    294281 
    295282!$OMP BARRIER 
    296     IF (write_out) THEN 
    297  
    298        IF (is_master) PRINT *,'CALL write_output_fields' 
    299  
    300 ! ---> for openMP test to fix later 
    301 !       CALL write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, & 
    302 !            f_buf_i, f_buf_v, f_buf_u3d, f_buf_ulon, f_buf_ulat, f_buf_s, f_buf_p) 
    303        CALL un2ulonlat(f_u, f_buf_ulon, f_buf_ulat) 
    304        CALL output_field("ulon",f_buf_ulon) 
    305        CALL output_field("ulat",f_buf_ulat) 
    306        CALL output_field("ps",f_ps) 
    307 !       CALL output_field("dps",f_dps) 
    308 !       CALL output_field("mass",f_mass) 
    309 !       CALL output_field("dmass",f_dmass) 
    310        CALL output_field("vort",f_qv) 
    311        CALL output_field("theta",f_theta) 
    312 !       CALL output_field("exner",f_pk) 
    313 !       CALL output_field("pv",f_qv) 
    314   
    315     END IF 
    316      
    317283    !    CALL check_mass_conservation(f_ps,f_dps) 
    318284    CALL trace_end("caldyn") 
     
    946912  END SUBROUTINE check_mass_conservation   
    947913   
    948   SUBROUTINE write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, & 
    949        f_buf_i, f_buf_v, f_buf_i3, f_buf1_i, f_buf2_i, f_buf_s, f_buf_p) 
    950     USE icosa 
    951     USE vorticity_mod 
    952     USE theta2theta_rhodz_mod 
    953     USE pression_mod 
    954     USE omega_mod 
    955     USE write_field_mod 
    956     USE vertical_interp_mod 
    957     USE wind_mod 
    958     TYPE(t_field),POINTER :: f_ps(:), f_phis(:), f_u(:), f_theta_rhodz(:), f_q(:), f_dps(:), & 
    959          f_buf_i(:), f_buf_v(:), f_buf_i3(:), f_buf1_i(:), f_buf2_i(:), f_buf_s(:), f_buf_p(:) 
    960      
    961     REAL(rstd) :: out_pression_level 
    962     CHARACTER(LEN=255) :: str_pression 
    963     CHARACTER(LEN=255) :: physics_type 
    964      
    965     out_pression_level=0. 
    966     CALL getin("out_pression_level",out_pression_level)  
    967     WRITE(str_pression,*) INT(out_pression_level/100) 
    968     str_pression=ADJUSTL(str_pression) 
    969      
    970     CALL writefield("ps",f_ps) 
    971     CALL writefield("dps",f_dps) 
    972     CALL writefield("phis",f_phis) 
    973     CALL vorticity(f_u,f_buf_v) 
    974     CALL writefield("vort",f_buf_v) 
    975  
    976     CALL w_omega(f_ps, f_u, f_buf_i) 
    977     CALL writefield('omega', f_buf_i) 
    978     IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
    979       CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 
    980       CALL writefield("omega"//TRIM(str_pression),f_buf_s) 
    981     ENDIF 
    982      
    983     ! Temperature 
    984 !    CALL theta_rhodz2temperature(f_ps,f_theta_rhodz,f_buf_i) ; ! FIXME 
    985       
    986     CALL getin('physics',physics_type) 
    987     IF (TRIM(physics_type)=='dcmip') THEN 
    988       CALL Tv2T(f_buf_i,f_q,f_buf1_i)  
    989       CALL writefield("T",f_buf1_i) 
    990       IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
    991         CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level) 
    992         CALL writefield("T"//TRIM(str_pression),f_buf_s) 
    993       ENDIF 
    994     ELSE 
    995       CALL writefield("T",f_buf_i) 
    996       IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
    997         CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 
    998         CALL writefield("T"//TRIM(str_pression),f_buf_s) 
    999       ENDIF 
    1000     ENDIF 
    1001     
    1002     ! velocity components 
    1003     CALL un2ulonlat(f_u, f_buf1_i, f_buf2_i) 
    1004     CALL writefield("ulon",f_buf1_i) 
    1005     CALL writefield("ulat",f_buf2_i) 
    1006  
    1007     IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 
    1008       CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level) 
    1009       CALL writefield("ulon"//TRIM(str_pression),f_buf_s) 
    1010       CALL vertical_interp(f_ps,f_buf2_i,f_buf_s,out_pression_level) 
    1011       CALL writefield("ulat"//TRIM(str_pression),f_buf_s) 
    1012     ENDIF 
    1013      
    1014     ! geopotential ! FIXME 
    1015     CALL thetarhodz2geopot(f_ps,f_phis,f_theta_rhodz, f_buf_s,f_buf_p,f_buf1_i,f_buf2_i,f_buf_i) 
    1016     CALL writefield("p",f_buf_p) 
    1017 !    CALL writefield("phi",f_geopot)   ! geopotential 
    1018     CALL writefield("theta",f_buf1_i) ! potential temperature 
    1019     CALL writefield("pk",f_buf2_i)    ! Exner pressure 
    1020    
    1021   END SUBROUTINE write_output_fields 
    1022    
    1023   SUBROUTINE thetarhodz2geopot(f_ps,f_phis,f_theta_rhodz, f_pks,f_p,f_theta,f_pk,f_phi)  
    1024     USE field_mod 
    1025     USE pression_mod 
    1026     USE exner_mod 
    1027     USE geopotential_mod 
    1028     USE theta2theta_rhodz_mod 
    1029     TYPE(t_field), POINTER :: f_ps(:), f_phis(:), f_theta_rhodz(:), &  ! IN 
    1030          f_pks(:), f_p(:), f_theta(:), f_pk(:), f_phi(:)               ! OUT 
    1031     REAL(rstd),POINTER :: pk(:,:), p(:,:), theta(:,:), theta_rhodz(:,:), & 
    1032          phi(:,:), phis(:), ps(:), pks(:) 
    1033     INTEGER :: ind 
    1034  
    1035     DO ind=1,ndomain 
    1036        IF (.NOT. assigned_domain(ind)) CYCLE 
    1037        CALL swap_dimensions(ind) 
    1038        CALL swap_geometry(ind) 
    1039        ps = f_ps(ind) 
    1040        p  = f_p(ind) 
    1041 !$OMP BARRIER 
    1042        CALL compute_pression(ps,p,0) 
    1043        pk = f_pk(ind) 
    1044        pks = f_pks(ind) 
    1045 !$OMP BARRIER 
    1046        CALL compute_exner(ps,p,pks,pk,0) 
    1047 !$OMP BARRIER 
    1048        theta_rhodz = f_theta_rhodz(ind) 
    1049        theta = f_theta(ind) 
    1050        CALL compute_theta_rhodz2theta(ps, theta_rhodz,theta,0) 
    1051        phis = f_phis(ind) 
    1052        phi = f_phi(ind) 
    1053        CALL compute_geopotential(phis,pks,pk,theta,phi,0) 
    1054     END DO 
    1055  
    1056   END SUBROUTINE thetarhodz2geopot 
    1057    
    1058   SUBROUTINE Tv2T(f_Tv, f_q, f_T) 
    1059   USE icosa 
    1060   IMPLICIT NONE 
    1061     TYPE(t_field), POINTER :: f_TV(:) 
    1062     TYPE(t_field), POINTER :: f_q(:) 
    1063     TYPE(t_field), POINTER :: f_T(:) 
    1064      
    1065     REAL(rstd),POINTER :: Tv(:,:), q(:,:,:), T(:,:) 
    1066     INTEGER :: ind 
    1067      
    1068     DO ind=1,ndomain 
    1069        IF (.NOT. assigned_domain(ind)) CYCLE 
    1070        CALL swap_dimensions(ind) 
    1071        CALL swap_geometry(ind) 
    1072        Tv=f_Tv(ind) 
    1073        q=f_q(ind) 
    1074        T=f_T(ind) 
    1075        T=Tv/(1+0.608*q(:,:,1)) 
    1076     END DO 
    1077      
    1078   END SUBROUTINE Tv2T 
    1079    
    1080914END MODULE caldyn_gcm_mod 
  • codes/icosagcm/trunk/src/geopotential_mod.f90

    r295 r354  
    11MODULE geopotential_mod 
     2  IMPLICIT NONE 
     3  PRIVATE 
    24 
     5  PUBLIC :: compute_geopotential 
    36CONTAINS 
    47 
    5   SUBROUTINE geopotential(f_phis,f_pks,f_pk,f_theta,f_phi) 
     8  SUBROUTINE geopotential(f_phis,f_pks,f_pk,f_theta,f_phi) ! ORPHAN 
    69  USE icosa 
    7   IMPLICIT NONE 
    810    TYPE(t_field), POINTER :: f_phis(:) 
    911    TYPE(t_field), POINTER :: f_pks(:) 
  • codes/icosagcm/trunk/src/timeloop_gcm.f90

    r350 r354  
    3030  USE icosa 
    3131  USE dissip_gcm_mod 
     32  USE observable_mod 
    3233  USE caldyn_mod 
    3334  USE etat0_mod 
     
    131132    CALL init_dissip 
    132133    CALL init_sponge 
     134    CALL init_observable 
    133135    CALL init_caldyn 
    134136    CALL init_guided 
     
    157159  USE caldyn_mod 
    158160  USE caldyn_gcm_mod, ONLY : req_ps, req_mass 
     161  USE observable_mod 
    159162  USE etat0_mod 
    160163  USE guided_mod 
     
    242245    IF (mod(it,itau_out)==0 ) THEN 
    243246      CALL update_time_counter(dt*it) 
    244       CALL output_field("q",f_q) 
     247      CALL write_output_fields_basic(f_ps, f_u, f_q) 
     248!      CALL output_field("q",f_q) 
    245249    ENDIF 
    246250     
Note: See TracChangeset for help on using the changeset viewer.