Ignore:
Timestamp:
12/15/14 17:10:42 (9 years ago)
Author:
ymipsl
Message:
  • activate splitting of XIOS file in physics so starting time is passed to the physic initialiszation.
  • call restart file periodically using the - itau_write_etat0 - start parameter.

YM

Location:
codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src/physics_lmdz_generic.f90

    r303 r314  
    5454  REAL(rstd),ALLOCATABLE :: bounds_latfi(:,:) 
    5555  REAL(rstd),ALLOCATABLE :: bounds_lonfi(:,:) 
     56  INTEGER :: time0 
    5657 
    5758    start_day=0 
     
    120121    ENDDO 
    121122 
    122  
     123    time0=itau0*dt 
    123124    CALL initialize_unstructured_physics(nbp_phys,llm, comm_icosa, mpi_size,distrib,            & 
    124                                          day_length,start_day,itau_physics*dt,                  & 
     125                                         day_length,start_day,time0,itau_physics*dt,                  & 
    125126                                         6,latfi,lonfi,airefi,bounds_lonfi,bounds_latfi,         & 
    126127                                         radius,g, gas_constant/mu, cpp,                        & 
  • codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src/restart.f90

    r297 r314  
    44  TYPE t_field_array 
    55    TYPE(t_field),POINTER :: field(:) 
     6    INTEGER               :: id 
    67  END TYPE t_field_array 
    78 
    8  
    9  
     9  TYPE(t_field_array),SAVE :: field_array(20) 
     10!$OMP THREADPRIVATE(field_array) 
     11   
     12  INTEGER,SAVE :: ncid 
     13  INTEGER,SAVE :: itid 
     14 
     15 
     16  PRIVATE :: ncid 
     17   
    1018CONTAINS 
    1119   
     
    3139  TYPE(t_field_array) :: field_array(20) 
    3240  INTEGER             :: nfield 
    33   INTEGER             :: fieldId(20) 
    3441    
    3542  TYPE(t_domain),POINTER :: d 
     
    3946  CHARACTER(LEN=255) :: restart_file_name 
    4047  INTEGER,PARAMETER  :: nvert=6 
    41   INTEGER    ::  ncid, cellId, levId, edgeId,  vertid, lonId, latId, bounds_lonId, bounds_latId, nqId, levAxisId 
     48  INTEGER    ::  cellId, levId, edgeId,  vertid, lonId, latId, bounds_lonId, bounds_latId, nqId, levAxisId 
    4249  INTEGER    :: ind,ind_glo,i,j,k,nf 
    4350  INTEGER    :: status 
    4451  REAL(rstd),ALLOCATABLE :: lon(:),lat(:),bounds_lon(:,:),bounds_lat(:,:) 
     52  LOGICAL,SAVE :: first=.TRUE. 
     53!$OMP THREADPRIVATE(first) 
    4554    
    4655    restart_file_name="restart" 
    4756    CALL getin("restart_file_name",restart_file_name) 
    4857 
     58!$OMP BARRIER 
    4959!$OMP MASTER 
    5060 
     
    7383       
    7484 
    75     IF (is_mpi_root) THEN 
     85    IF (is_mpi_root .AND. first) THEN 
    7686      status = NF90_CREATE(TRIM(ADJUSTL(restart_file_name))//'.nc', IOR(NF90_CLOBBER,NF90_NETCDF4), ncid) 
    7787      IF (status/=NF90_NOERR) THEN 
     
    8696      status = NF90_DEF_DIM(ncid,'nvert',nvert,vertId) 
    8797      status = NF90_DEF_DIM(ncid,'nq',nqtot,nqId) 
    88       status = NF90_PUT_ATT(ncid,NF90_GLOBAL,"iteration",it) 
     98!      status = NF90_PUT_ATT(ncid,NF90_GLOBAL,"iteration",it) 
     99      status = NF90_DEF_VAR(ncid,"iteration",NF90_INT,varid=itid) 
    89100       
    90101      status = NF90_DEF_VAR(ncid,'lon',NF90_DOUBLE,(/ cellId /),lonId) 
     
    107118        IF (field(1)%field_type==field_T) THEN 
    108119          IF (field(1)%ndim==2) THEN 
    109             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId /),fieldId(nf)) 
    110             status = NF90_PUT_ATT(ncid,FieldId(nf),"coordinates","lon lat") 
     120            status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId /),field_array(nf)%id) 
     121            status = NF90_PUT_ATT(ncid,field_array(nf)%id,"coordinates","lon lat") 
    111122          ELSE IF (field(1)%ndim==3) THEN 
    112             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId, levId /),fieldId(nf)) 
    113             status = NF90_PUT_ATT(ncid,FieldId(nf),"coordinates","lev lon lat") 
     123            status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId, levId /),field_array(nf)%id) 
     124            status = NF90_PUT_ATT(ncid,field_array(nf)%id,"coordinates","lev lon lat") 
    114125          ELSE IF (field(1)%ndim==4) THEN 
    115             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId, levId,nqId /),fieldId(nf)) 
    116             status = NF90_PUT_ATT(ncid,FieldId(nf),"coordinates","nq lev lon lat") 
     126            status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId, levId,nqId /),field_array(nf)%id) 
     127            status = NF90_PUT_ATT(ncid,field_array(nf)%id,"coordinates","nq lev lon lat") 
    117128          ENDIF 
    118129        ELSE IF (field(1)%field_type==field_U) THEN 
    119130          IF (field(1)%ndim==2) THEN 
    120             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId /),fieldId(nf)) 
     131            status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId /),field_array(nf)%id) 
    121132          ELSE IF (field(1)%ndim==3) THEN 
    122             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId, levId /),fieldId(nf)) 
     133            status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId, levId /),field_array(nf)%id) 
    123134          ELSE IF (field(1)%ndim==4) THEN 
    124             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId, levId, nqId /),fieldId(nf)) 
     135            status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId, levId, nqId /),field_array(nf)%id) 
    125136          ENDIF 
    126137        ENDIF 
     
    162173      status=NF90_PUT_VAR(ncid,bounds_latId,REAL(bounds_lat,r8),start=(/ 1,1 /),count=(/ nvert,ncell_glo /)) 
    163174      status=NF90_PUT_VAR(ncid,levAxisId,REAL(presnivs,r8),start=(/ 1 /),count=(/ llm /)) 
     175      first=.FALSE. 
     176       
    164177    ENDIF ! of IF (is_mpi_root) 
    165178 
     179    IF (is_mpi_root) status=NF90_PUT_VAR(ncid,itid,it) 
    166180    DO nf=1,nfield 
    167181      field=>field_array(nf)%field 
    168       CALL write_restart_field(field,fieldId(nf),ncid) 
     182      CALL write_restart_field(field,field_array(nf)%id,ncid) 
    169183    ENDDO 
    170184           
     
    177191 
    178192    IF (is_mpi_root) THEN 
    179       status = NF90_CLOSE(ncid)       
     193      status = NF90_SYNC(ncid)       
    180194      IF (status/=NF90_NOERR) THEN 
    181195         WRITE(*,*) "write_restart error: failed to close ",TRIM(ADJUSTL(restart_file_name))//'.nc' 
     
    418432      field=>field_array(nf)%field 
    419433      status = nf90_inq_varid(ncid, TRIM(ADJUSTL(field(1)%name)), fieldId(nf)) 
    420       status = nf90_get_att(ncid, NF90_GLOBAL, "iteration", it) 
     434      status = nf90_inq_varid(ncid, "iteration",itid) 
     435      IF (status==NF90_NOERR) THEN  
     436        status = nf90_get_var(ncid, itid, it) 
     437      ELSE 
     438        status = nf90_get_att(ncid, NF90_GLOBAL, "iteration", it) 
     439      ENDIF 
    421440      CALL read_start_field(field,fieldId(nf),ncid) 
    422441    ENDDO 
  • codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src/time.f90

    r298 r314  
    1717  REAL(rstd),SAVE :: write_period 
    1818!$OMP THREADPRIVATE(write_period)   
    19   INTEGER,SAVE    :: itau_out, itau_adv, itau_dissip, itau_physics, itaumax 
    20 !$OMP THREADPRIVATE(itau_out, itau_adv, itau_dissip, itau_physics, itaumax 
     19  INTEGER,SAVE    :: itau_out, itau_adv, itau_dissip, itau_physics, itaumax, itau_write_etat0 
     20!$OMP THREADPRIVATE(itau_out, itau_adv, itau_dissip, itau_physics, itaumax, itau_write_etat0 
    2121   
    2222  INTEGER,SAVE :: day_step,ndays 
     
    3838 
    3939  PUBLIC create_time_counter_header, update_time_counter, close_time_counter, init_time,  & 
    40          dt, write_period, itau_out, itau_adv, itau_dissip, itau_physics, itaumax, &  
     40         dt, write_period, itau_out, itau_adv, itau_dissip, itau_physics,itau_write_etat0, itaumax, &  
    4141day_step,ndays,jD_ref,jH_ref,day_ini,day_end,annee_ref,day_ref,an, mois, jour,heure, & 
    4242            calend,time_style,itau0 
     
    8686    itau_physics=1 
    8787    CALL getin('itau_physics',itau_physics) 
     88 
     89    itau_write_etat0=HUGE(itau_write_etat0) 
     90    CALL getin('itau_write_etat0',itau_write_etat0) 
     91    itau_write_etat0=itau_write_etat0/dt 
    8892 
    8993    IF (is_mpi_root .AND. omp_master)  THEN 
  • codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src/timeloop_gcm.f90

    r304 r314  
    302302      CALL physics(it,f_phis, f_ps, f_theta_rhodz, f_u, f_wflux, f_q) 
    303303    ENDIF 
     304 
     305    IF (MOD(it,itau_write_etat0)==0 .OR. it==itau0+itaumax) THEN 
     306      CALL write_etat0(it,f_ps, f_phis,f_theta_rhodz,f_u,f_q) 
     307    ENDIF 
    304308     
    305309  ENDDO 
    306310 
    307   CALL write_etat0(itau0+itaumax,f_ps, f_phis,f_theta_rhodz,f_u,f_q)  
     311!  CALL write_etat0(itau0+itaumax,f_ps, f_phis,f_theta_rhodz,f_u,f_q)  
    308312 
    309313  CALL check_conserve(f_ps,f_dps,f_u,f_theta_rhodz,f_phis,it)   
Note: See TracChangeset for help on using the changeset viewer.