Changeset 97


Ignore:
Timestamp:
08/04/12 00:13:44 (12 years ago)
Author:
ymipsl
Message:

Put conforming IO for dcmip testcase

YM

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

Legend:

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

    r96 r97  
    643643    USE omega_mod 
    644644    USE write_field 
     645    USE vertical_interp_mod 
    645646    TYPE(t_field),POINTER :: f_ps(:), f_phis(:), f_u(:), f_theta_rhodz(:), f_dps(:), & 
    646647         f_buf_i(:), f_buf_v(:), f_buf_i3(:), f_buf1_i(:), f_buf2_i(:), f_buf_s(:), f_buf_p(:) 
     648     
     649    REAL(rstd) :: out_pression_lev 
     650    CHARACTER(LEN=255) :: str_pression 
     651     
     652    out_pression_level=0 
     653    CALL getin("out_pression_level",out_pression_level)  
     654    WRITE(str_pression,*) INT(out_pression_level/100) 
     655    str_pression=ADJUSTL(str_pression) 
    647656     
    648657    CALL writefield("ps",f_ps) 
     
    654663    CALL w_omega(f_ps, f_u, f_buf_i) 
    655664    CALL writefield('omega', f_buf_i) 
     665    IF (out_pression_level<=preff) THEN 
     666      CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 
     667      CALL writefield("omega"//TRIM(str_pression),f_buf_s) 
     668    ENDIF 
    656669     
    657670    ! Temperature 
    658671    CALL theta_rhodz2temperature(f_ps,f_theta_rhodz,f_buf_i) ; 
    659672    CALL writefield("T",f_buf_i) 
     673     
     674    IF (out_pression_level<=preff) THEN 
     675      CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 
     676      CALL writefield("T"//TRIM(str_pression),f_buf_s) 
     677    ENDIF 
    660678     
    661679    ! velocity components 
     
    663681    CALL writefield("ulon",f_buf1_i) 
    664682    CALL writefield("ulat",f_buf2_i) 
     683 
     684    IF (out_pression_level<=preff) THEN 
     685      CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level) 
     686      CALL writefield("ulon"//TRIM(str_pression),f_buf_s) 
     687      CALL vertical_interp(f_ps,f_buf2_i,f_buf_s,out_pression_level) 
     688      CALL writefield("vlon"//TRIM(str_pression),f_buf_s) 
     689    ENDIF 
    665690     
    666691    ! geopotential 
     
    670695    CALL writefield("theta",f_buf1_i) ! potential temperature 
    671696    CALL writefield("pk",f_buf2_i) ! Exner pressure 
     697   
    672698   
    673699  END SUBROUTINE write_output_fields 
  • codes/icosagcm/trunk/src/icosa_gcm.f90

    r82 r97  
    66  USE wind_mod 
    77  USE mpipara 
     8  USE vertical_interp_mod 
    89  IMPLICIT NONE 
    910   
     
    4849  CALL compute_geometry 
    4950  CALL init_disvert  
    50    
     51  CALL init_vertical_interp 
     52 
    5153  CALL allocate_field(sum_ne,field_T,type_real) 
    5254   
     
    7981!  CALL WriteField("sum_ne",sum_ne) 
    8082  CALL write_apbp 
    81   CALL create_time_counter_header 
     83  CALL init_time 
    8284  CALL timeloop 
    8385 
  • codes/icosagcm/trunk/src/time.f90

    r82 r97  
    11MODULE time_mod 
    2  
     2  use prec 
    33  PRIVATE 
    44 
     
    77  INTEGER,SAVE :: it 
    88 
    9   PUBLIC create_time_counter_header, update_time_counter, close_time_counter 
     9  REAL(rstd),SAVE :: dt 
     10  REAL(rstd),SAVE :: write_period 
     11  INTEGER,SAVE :: itau_out 
     12  INTEGER,SAVE :: itaumax 
     13   
     14  PUBLIC create_time_counter_header, update_time_counter, close_time_counter, init_time 
    1015 
    1116 
    1217 
    1318CONTAINS 
     19   
     20  SUBROUTINE init_time 
     21  USE earth_const 
     22  USE ioipsl 
     23  IMPLICIT NONE 
     24  REAL(rstd) :: run_length 
     25   
     26    dt=90. 
     27    CALL getin('dt',dt) 
     28 
     29    itaumax=100 
     30    CALL getin('itaumax',itaumax) 
     31 
     32    run_length=dt*itaumax 
     33    CALL getin('run_length',run_length) 
     34    itaumax=run_length/dt 
     35    PRINT *,'itaumax=',itaumax 
     36    dt=dt/scale_factor 
     37 
     38    write_period=0 
     39    CALL getin('write_period',write_period) 
     40    write_period=write_period/scale_factor 
     41    itau_out=FLOOR(.5+write_period/dt) 
     42    PRINT *, 'Output frequency (scaled) set to ',write_period, ' : itau_out = ',itau_out 
     43     
     44    CALL create_time_counter_header 
     45     
     46  END SUBROUTINE init_time 
    1447 
    1548  SUBROUTINE create_time_counter_header 
     
    2154  INTEGER :: timeid, dtid 
    2255  REAL(rstd) :: dt 
     56  CHARACTER(LEN=255) :: time_frequency 
     57   
    2358    status = NF90_CREATE('time_counter.nc', NF90_CLOBBER, ncid) 
    2459    status = NF90_DEF_DIM(ncid,'time_counter',NF90_UNLIMITED,timeid) 
     
    2863    status = NF90_PUT_ATT(ncid,time_counter_id,"calendar","noleap") 
    2964    status = NF90_DEF_VAR(ncid,'mdt',NF90_DOUBLE,varid=dtid) 
     65 
     66    WRITE(time_frequency,*) write_period 
     67    PRINT*,TRIM(time_frequency) 
     68    status = NF90_PUT_ATT(ncid,NF90_GLOBAL,"time_frequency",TRIM(time_frequency)//"s") 
     69 
    3070    status = NF90_ENDDEF(ncid)  
    3171 
  • codes/icosagcm/trunk/src/timeloop_gcm.f90

    r81 r97  
    102102   
    103103  CALL etat0(f_ps,f_phis,f_theta_rhodz,f_u, f_q) 
     104  CALL writefield("phis",f_phis,once=.TRUE.) 
    104105  CALL transfert_request(f_q,req_i1)  
    105106 
Note: See TracChangeset for help on using the changeset viewer.