Changeset 1896 for trunk/LMDZ.TITAN/libf


Ignore:
Timestamp:
Jan 17, 2018, 4:20:00 PM (7 years ago)
Author:
jvatant
Message:

Merge EM modifs on phy_common and xios
from LMDZ.GENERIC to LMDZ.TITAN.
See logs from r1673, r1682 and r1760
--JVO

Location:
trunk/LMDZ.TITAN/libf
Files:
11 edited
3 copied

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.TITAN/libf/dynphy_lonlat/inigeomphy_mod.F90

    r1621 r1896  
    7373  REAL,ALLOCATABLE,SAVE :: boundslonfi(:,:)
    7474  REAL,ALLOCATABLE,SAVE :: boundslatfi(:,:)
    75 !$OMP THREADPRIVATE (latfi,lonfi,cufi,cvfi,airefi,boundslonfi,boundslatfi)
     75  INTEGER,ALLOCATABLE,SAVE :: ind_cell_glo_fi(:)
     76!$OMP THREADPRIVATE (latfi,lonfi,cufi,cvfi,airefi,boundslonfi,boundslatfi,ind_cell_glo_fi)
    7677
    7778  ! Initialize Physics distibution and parameters and interface with dynamics
     
    201202  ALLOCATE(boundslonfi(klon_omp,4))
    202203  ALLOCATE(boundslatfi(klon_omp,4))
    203 !  CALL initcomgeomphy
     204  ALLOCATE(ind_cell_glo_fi(klon_omp))
     205
    204206
    205207  offset = klon_mpi_begin - 1
     
    211213  boundslonfi(1:klon_omp,:) = boundslonfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
    212214  boundslatfi(1:klon_omp,:) = boundslatfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:)
     215  ind_cell_glo_fi(1:klon_omp)=(/ (i,i=offset+klon_omp_begin,offset+klon_omp_end) /)
    213216
    214217  ! copy over local grid longitudes and latitudes
    215218  CALL init_geometry(klon_omp,lonfi,latfi,boundslonfi,boundslatfi, &
    216                      airefi,cufi,cvfi)
     219                     airefi,ind_cell_glo_fi,cufi,cvfi)
    217220
    218221  ! copy over preff , ap(), bp(), etc
  • trunk/LMDZ.TITAN/libf/dynphy_lonlat/mod_interface_dyn_phys.F90

    r1543 r1896  
    2222   
    2323    k=1
    24     IF (is_north_pole) THEN
     24    IF (is_north_pole_dyn) THEN
    2525      index_i(k)=1
    2626      index_j(k)=1
     
    4242    ENDDO
    4343   
    44     IF (is_south_pole) THEN
     44    IF (is_south_pole_dyn) THEN
    4545      index_i(k)=1
    4646      index_j(k)=jj_end
  • trunk/LMDZ.TITAN/libf/phy_common

  • trunk/LMDZ.TITAN/libf/phy_common/geometry_mod.F90

    r1543 r1896  
    3030!$OMP THREADPRIVATE(cell_area)
    3131
     32  INTEGER,SAVE,ALLOCATABLE :: ind_cell_glo(:)      ! global index of a local cell
     33!$OMP THREADPRIVATE(ind_cell_glo)
    3234
    3335CONTAINS
     
    3537  SUBROUTINE init_geometry(klon,longitude_,latitude_, &
    3638                           boundslon_,boundslat_, &
    37                            cell_area_,dx_,dy_)
     39                           cell_area_,ind_cell_glo_,dx_,dy_)
    3840  USE mod_grid_phy_lmdz, ONLY: nvertex
    3941  USE nrtype, ONLY : PI
     
    4547    REAL,INTENT(IN) :: boundslat_(klon,nvertex)
    4648    REAL,INTENT(IN) :: cell_area_(klon)
     49    INTEGER,OPTIONAL,INTENT(IN) :: ind_cell_glo_(klon)
    4750    REAL,OPTIONAL,INTENT(IN) :: dx_(klon)
    4851    REAL,OPTIONAL,INTENT(IN) :: dy_(klon)
     
    5558    ALLOCATE(boundslat(klon,nvertex))
    5659    ALLOCATE(cell_area(klon))
     60    IF (PRESENT(ind_cell_glo_)) ALLOCATE(ind_cell_glo(klon))
    5761    IF (PRESENT(dx_)) ALLOCATE(dx(klon))
    5862    IF (PRESENT(dy_))ALLOCATE(dy(klon))
     
    6569    boundslat(:,:) = boundslat_(:,:)
    6670    cell_area(:) = cell_area_(:)
     71    IF (PRESENT(ind_cell_glo_)) ind_cell_glo(:) = ind_cell_glo_(:)
    6772    IF (PRESENT(dx_)) dx(:) = dx_(:)
    6873    IF (PRESENT(dy_)) dy(:) = dy_(:)
  • trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_mpi_data.F90

    r1543 r1896  
    11!
    2 !$Header$
     2!$Id$
    33!
    44MODULE mod_phys_lmdz_mpi_data
    5 !  USE mod_const_mpi
    65 
    76  INTEGER,SAVE :: ii_begin
     
    3635  INTEGER,SAVE :: mpi_size
    3736  INTEGER,SAVE :: mpi_master
    38 !  INTEGER,SAVE :: mpi_root
    3937  LOGICAL,SAVE :: is_mpi_root
    4038  LOGICAL,SAVE :: is_using_mpi
    4139 
    4240 
    43   LOGICAL,SAVE :: is_north_pole
    44   LOGICAL,SAVE :: is_south_pole
     41  LOGICAL,SAVE :: is_north_pole_dyn
     42  LOGICAL,SAVE :: is_south_pole_dyn
    4543  INTEGER,SAVE :: COMM_LMDZ_PHY
    4644  INTEGER,SAVE :: MPI_REAL_LMDZ   ! MPI_REAL8
     
    4846CONTAINS
    4947 
    50 !  SUBROUTINE Init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)
    5148  SUBROUTINE init_phys_lmdz_mpi_data(nbp, nbp_lon, nbp_lat, communicator)
    52 !  USE mod_const_mpi, ONLY : COMM_LMDZ
    5349  IMPLICIT NONE
    5450#ifdef CPP_MPI
    5551    INCLUDE 'mpif.h'
    5652#endif
    57     INTEGER,INTENT(in) :: nbp
    58     INTEGER,INTENT(in) :: nbp_lon
    59     INTEGER,INTENT(in) :: nbp_lat
    60     INTEGER,INTENT(in) :: communicator
     53    INTEGER,INTENT(IN) :: nbp
     54    INTEGER,INTENT(IN) :: nbp_lon
     55    INTEGER,INTENT(IN) :: nbp_lat
     56    INTEGER,INTENT(IN) :: communicator
    6157   
    6258    INTEGER,ALLOCATABLE :: distrib(:)
     
    109105   
    110106    IF (mpi_rank == 0) THEN
    111       is_north_pole = .TRUE.
    112     ELSE
    113       is_north_pole = .FALSE.
     107      is_north_pole_dyn = .TRUE.
     108    ELSE
     109      is_north_pole_dyn = .FALSE.
    114110    ENDIF
    115111   
    116112    IF (mpi_rank == mpi_size-1) THEN
    117       is_south_pole = .TRUE.
    118     ELSE
    119       is_south_pole = .FALSE.
     113      is_south_pole_dyn = .TRUE.
     114    ELSE
     115      is_south_pole_dyn = .FALSE.
    120116    ENDIF
    121117   
     
    187183
    188184  SUBROUTINE print_module_data
    189 !  USE print_control_mod, ONLY: lunout
     185  USE print_control_mod, ONLY: lunout
    190186  IMPLICIT NONE
    191   INCLUDE "iniprint.h"
    192187 
    193188    WRITE(lunout,*) 'ii_begin =', ii_begin
     
    217212    WRITE(lunout,*) 'mpi_master =', mpi_master
    218213    WRITE(lunout,*) 'is_mpi_root =', is_mpi_root
    219     WRITE(lunout,*) 'is_north_pole =', is_north_pole
    220     WRITE(lunout,*) 'is_south_pole =', is_south_pole
     214    WRITE(lunout,*) 'is_north_pole_dyn =', is_north_pole_dyn
     215    WRITE(lunout,*) 'is_south_pole_dyn =', is_south_pole_dyn
    221216    WRITE(lunout,*) 'COMM_LMDZ_PHY =', COMM_LMDZ_PHY
    222217 
  • trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_mpi_transfert.F90

    r1543 r1896  
    11!
    2 !$Header$
     2!$Id$
    33!
    44MODULE mod_phys_lmdz_mpi_transfert
     
    16931693   
    16941694    offset=ii_begin
    1695     IF (is_north_pole) Offset=nbp_lon
     1695    IF (is_north_pole_dyn) Offset=nbp_lon
    16961696   
    16971697   
     
    17031703   
    17041704   
    1705     IF (is_north_pole) THEN
     1705    IF (is_north_pole_dyn) THEN
    17061706      DO i=1,dimsize
    17071707        DO ij=1,nbp_lon
     
    17111711    ENDIF
    17121712   
    1713     IF (is_south_pole) THEN
     1713    IF (is_south_pole_dyn) THEN
    17141714      DO i=1,dimsize
    17151715        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
     
    17371737   
    17381738    offset=ii_begin
    1739     IF (is_north_pole) Offset=nbp_lon
     1739    IF (is_north_pole_dyn) Offset=nbp_lon
    17401740   
    17411741   
     
    17471747   
    17481748   
    1749     IF (is_north_pole) THEN
     1749    IF (is_north_pole_dyn) THEN
    17501750      DO i=1,dimsize
    17511751        DO ij=1,nbp_lon
     
    17551755    ENDIF
    17561756   
    1757     IF (is_south_pole) THEN
     1757    IF (is_south_pole_dyn) THEN
    17581758      DO i=1,dimsize
    17591759        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
     
    17821782   
    17831783    offset=ii_begin
    1784     IF (is_north_pole) Offset=nbp_lon
     1784    IF (is_north_pole_dyn) Offset=nbp_lon
    17851785   
    17861786   
     
    17921792   
    17931793   
    1794     IF (is_north_pole) THEN
     1794    IF (is_north_pole_dyn) THEN
    17951795      DO i=1,dimsize
    17961796        DO ij=1,nbp_lon
     
    18001800    ENDIF
    18011801   
    1802     IF (is_south_pole) THEN
     1802    IF (is_south_pole_dyn) THEN
    18031803      DO i=1,dimsize
    18041804        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
     
    18241824
    18251825    offset=ii_begin
    1826     IF (is_north_pole) offset=nbp_lon
     1826    IF (is_north_pole_dyn) offset=nbp_lon
    18271827
    18281828    DO i=1,dimsize
     
    18321832    ENDDO
    18331833
    1834     IF (is_north_pole) THEN
     1834    IF (is_north_pole_dyn) THEN
    18351835      DO i=1,dimsize
    18361836        VarOut(1,i)=VarIn(1,i)
     
    18541854
    18551855    offset=ii_begin
    1856     IF (is_north_pole) offset=nbp_lon
     1856    IF (is_north_pole_dyn) offset=nbp_lon
    18571857
    18581858    DO i=1,dimsize
     
    18621862    ENDDO
    18631863
    1864     IF (is_north_pole) THEN
     1864    IF (is_north_pole_dyn) THEN
    18651865      DO i=1,dimsize
    18661866         VarOut(1,i)=VarIn(1,i)
     
    18831883
    18841884    offset=ii_begin
    1885     IF (is_north_pole) offset=nbp_lon
     1885    IF (is_north_pole_dyn) offset=nbp_lon
    18861886
    18871887    DO i=1,dimsize
     
    18911891    ENDDO
    18921892
    1893     IF (is_north_pole) THEN
     1893    IF (is_north_pole_dyn) THEN
    18941894      DO i=1,dimsize
    18951895        VarOut(1,i)=VarIn(1,i)
  • trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_omp_data.F90

    r1543 r1896  
    11!
    2 !$Id: mod_phys_lmdz_omp_data.F90 2326 2015-07-10 12:24:29Z emillour $
     2!$Id: mod_phys_lmdz_omp_data.F90 2429 2016-01-27 12:43:09Z fairhead $
    33!
    44MODULE mod_phys_lmdz_omp_data
     
    77  INTEGER,SAVE :: omp_rank
    88  LOGICAL,SAVE :: is_omp_root
     9  LOGICAL,SAVE :: is_omp_master  ! alias of is_omp_root
    910  LOGICAL,SAVE :: is_using_omp
     11  LOGICAL,SAVE :: is_north_pole_phy, is_south_pole_phy
    1012 
    1113  INTEGER,SAVE,DIMENSION(:),ALLOCATABLE :: klon_omp_para_nb
     
    1618  INTEGER,SAVE :: klon_omp_begin
    1719  INTEGER,SAVE :: klon_omp_end
    18 !$OMP  THREADPRIVATE(omp_rank,klon_omp,is_omp_root,klon_omp_begin,klon_omp_end)
     20!$OMP  THREADPRIVATE(omp_rank,klon_omp,is_omp_root,is_omp_master,klon_omp_begin,klon_omp_end)
     21!$OMP  THREADPRIVATE(is_north_pole_phy, is_south_pole_phy)
    1922
    2023CONTAINS
    2124 
    2225  SUBROUTINE Init_phys_lmdz_omp_data(klon_mpi)
    23     USE dimphy
     26    USE dimphy
     27    USE mod_phys_lmdz_mpi_data, ONLY : is_north_pole_dyn, is_south_pole_dyn
    2428    IMPLICIT NONE
    2529    INTEGER, INTENT(in) :: klon_mpi
     
    4347        omp_size=OMP_GET_NUM_THREADS()
    4448!$OMP END MASTER
     49!$OMP BARRIER
    4550        omp_rank=OMP_GET_THREAD_NUM()   
    4651#else   
     
    5661   ELSE
    5762     abort_message = 'ANORMAL : OMP_MASTER /= 0'
    58      CALL abort_gcm (modname,abort_message,1)
     63     CALL abort_physic (modname,abort_message,1)
    5964   ENDIF
    6065!$OMP END MASTER
    61 
     66   is_omp_master=is_omp_root
    6267
    6368!$OMP MASTER
     69
    6470    ALLOCATE(klon_omp_para_nb(0:omp_size-1))
    6571    ALLOCATE(klon_omp_para_begin(0:omp_size-1))
     
    8086!$OMP END MASTER
    8187!$OMP BARRIER
     88
     89   if ((is_north_pole_dyn) .AND. (omp_rank == 0 )) then
     90      is_north_pole_phy = .TRUE.
     91    else
     92      is_north_pole_phy = .FALSE.
     93    endif
     94    if ((is_south_pole_dyn) .AND. (omp_rank == omp_size-1)) then
     95      is_south_pole_phy = .TRUE.
     96    else
     97      is_south_pole_phy = .FALSE.
     98    endif
    8299   
    83100    klon_omp=klon_omp_para_nb(omp_rank)
     
    90107
    91108  SUBROUTINE Print_module_data
     109  USE print_control_mod, ONLY: lunout
    92110  IMPLICIT NONE
    93   INCLUDE "iniprint.h"
    94111
    95112!$OMP CRITICAL 
  • trunk/LMDZ.TITAN/libf/phy_common/physics_distribution_mod.F90

    r1543 r1896  
    1010                                       nbp, nbp_lon, nbp_lat, nbp_lev, &
    1111                                       communicator)
    12   USE mod_phys_lmdz_para, ONLY: init_phys_lmdz_para
     12  USE mod_phys_lmdz_para, ONLY: init_phys_lmdz_para, klon_omp
    1313  USE mod_grid_phy_lmdz, ONLY: init_grid_phy_lmdz
     14  USE dimphy, ONLY : Init_dimphy
     15
    1416  IMPLICIT NONE
    1517    INTEGER,INTENT(IN) :: grid_type
     
    2426    CALL init_grid_phy_lmdz(grid_type,nvertex, nbp_lon,nbp_lat,nbp_lev)
    2527    CALL init_phys_lmdz_para(nbp,nbp_lon, nbp_lat, communicator)
     28!$OMP PARALLEL
     29    CALL init_dimphy(klon_omp,nbp_lev)
     30!$OMP END PARALLEL
    2631
    2732  END SUBROUTINE init_physics_distribution 
  • trunk/LMDZ.TITAN/libf/phytitan/inifis_mod.F90

    r1843 r1896  
    99             prad,pg,pr,pcpp)
    1010
     11  use init_print_control_mod, only: init_print_control
    1112  use radinc_h, only: ini_radinc_h
    1213  use datafile_mod
     
    7475  REAL SSUM
    7576 
     77  ! Initialize flags lunout, prt_level, debug (in print_control_mod)
     78  CALL init_print_control
     79
    7680  ! initialize constants in comcstfi_mod
    7781  rad=prad
  • trunk/LMDZ.TITAN/libf/phytitan/physiq_mod.F90

    r1844 r1896  
    3939      use vertical_layers_mod, only: presnivs, pseudoalt
    4040      use ioipsl_getin_p_mod, only: getin_p
     41      use mod_phys_lmdz_omp_data, ONLY: is_omp_master
    4142#ifdef CPP_XIOS     
    4243      use xios_output_mod, only: initialize_xios_output, &
    4344                                 update_xios_timestep, &
    4445                                 send_xios_field
     46      use wxios, only: wxios_context_init, xios_context_finalize
    4547#endif
    4648      implicit none
     
    520522
    521523
     524#ifdef CPP_XIOS
     525        ! Initialize XIOS context
     526        write(*,*) "physiq: call wxios_context_init"
     527        CALL wxios_context_init
     528#endif
     529
    522530!        Read 'startfi.nc' file.
    523531!        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    625633                                     presnivs,pseudoalt)
    626634#endif
     635         write(*,*) "physiq: end of firstcall"
    627636      endif ! end of 'firstcall'
    628637
     
    13281337                          tsurf,tsoil,emis,q2,qsurf_hist,tankCH4)
    13291338         endif
    1330          
    1331       endif ! end of 'lastcall'
     1339    endif ! end of 'lastcall'
    13321340
    13331341
     
    15191527      CALL send_xios_field("u",zu)
    15201528      CALL send_xios_field("v",zv)
    1521      
     1529
     1530      if (lastcall.and.is_omp_master) then
     1531        write(*,*) "physiq: call xios_context_finalize"
     1532        call xios_context_finalize
     1533      endif
    15221534#endif
    15231535
  • trunk/LMDZ.TITAN/libf/phytitan/xios_output_mod.F90

    r1626 r1896  
    2626                                mpi_size, mpi_rank, klon_mpi, &
    2727                                is_sequential, is_south_pole_dyn
    28   USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, klon_glo
     28  USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, klon_glo, grid_type, unstructured
    2929  USE print_control_mod, ONLY: lunout, prt_level
    3030  USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat
    3131  USE regular_lonlat_mod, ONLY: lon_reg, lat_reg
    3232  USE nrtype, ONLY: pi
    33   USE wxios
     33#ifdef CPP_XIOS
     34  USE xios
     35#endif
     36  USE wxios, ONLY: wxios_domain_param, wxios_domain_param_unstructured, wxios_closedef
    3437  IMPLICIT NONE
    3538 
     
    6063    ! 2. Declare horizontal domain
    6164    ! Set values for the mask:
    62     IF (mpi_rank == 0) THEN
    63         data_ibegin = 0
    64     ELSE
    65         data_ibegin = ii_begin - 1
    66     END IF
    67 
    68     IF (mpi_rank == mpi_size-1) THEN
    69         data_iend = nbp_lon
    70     ELSE
    71         data_iend = ii_end + 1
    72     END IF
    73 
    74     if (prt_level>=10) then
    75       write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," iibegin=",ii_begin , " ii_end=",ii_end," jjbegin=",jj_begin," jj_nb=",jj_nb," jj_end=",jj_end
    76       write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," nbp_lon=",nbp_lon," nbp_lat=",nbp_lat
    77       write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," data_ibegin=",data_ibegin," data_iend=",data_iend
    78       write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," data_ibegin=",data_ibegin," data_iend=",data_iend
    79       write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," is_south_pole=",is_south_pole_dyn
    80     endif
    81 
     65!    IF (mpi_rank == 0) THEN
     66!        data_ibegin = 0
     67!    ELSE
     68!        data_ibegin = ii_begin - 1
     69!    END IF
     70
     71!    IF (mpi_rank == mpi_size-1) THEN
     72!        data_iend = nbp_lon
     73!    ELSE
     74!        data_iend = ii_end + 1
     75!    END IF
     76
     77!    if (prt_level>=10) then
     78!      write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," iibegin=",ii_begin , " ii_end=",ii_end," jjbegin=",jj_begin," jj_nb=",jj_nb," jj_end=",jj_end
     79!      write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," nbp_lon=",nbp_lon," nbp_lat=",nbp_lat
     80!      write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," data_ibegin=",data_ibegin," data_iend=",data_iend
     81!      write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," data_ibegin=",data_ibegin," data_iend=",data_iend
     82!      write(lunout,*) "initialize_xios_output: mpirank=",mpi_rank," is_south_pole=",is_south_pole_dyn
     83!    endif
     84
     85!$OMP END MASTER
     86!$OMP BARRIER
    8287    ! Initialize the XIOS domain coreesponding to this process:
    8388    if (prt_level>=10) write(lunout,*) "initialize_xios_output: call wxios_domain_param"
    84     CALL wxios_domain_param("dom_glo", is_sequential, nbp_lon, jj_nb, nbp_lon, nbp_lat, &
    85                             1, nbp_lon, ii_begin, ii_end, jj_begin, jj_end,             &
    86                             klon_mpi+2*(nbp_lon-1), data_ibegin, data_iend,             &
    87                             lat_reg*(180./pi), lon_reg*(180./pi),                       &
    88                             is_south_pole_dyn,mpi_rank)
    89 
     89!    CALL wxios_domain_param("dom_glo", is_sequential, nbp_lon, jj_nb, nbp_lon, nbp_lat, &
     90!                            1, nbp_lon, ii_begin, ii_end, jj_begin, jj_end,             &
     91!                            klon_mpi+2*(nbp_lon-1), data_ibegin, data_iend,             &
     92!                            lat_reg*(180./pi), lon_reg*(180./pi),                       &
     93!                            is_south_pole_dyn,mpi_rank)
     94
     95    IF (grid_type==unstructured) THEN
     96      CALL wxios_domain_param_unstructured("dom_glo")
     97    ELSE
     98      CALL wxios_domain_param("dom_glo")
     99    ENDIF
     100
     101!$OMP MASTER
    90102    ! 3. Declare calendar and time step
    91     if (prt_level>=10) write(lunout,*) "initialize_xios_output: build calendar"
     103    if (prt_level>=10) then
     104     write(lunout,*) "initialize_xios_output: build calendar"
     105    endif
    92106    timestep%second=dtphys
    93     ! time origin of the simulation (default: 1st year/1st month/1st day, Ls=0)
    94     time_origin=xios_date(1,1,1,0,0,0)
    95     ! start date of the simulation (i.e time elapsed since last Ls=0)
    96     start_date=xios_date(1,1,1,0,0,nint((day+timeofday)*daysec))
     107    if (nint(dtphys).ne.dtphys) then
     108      write(*,*) "initialize_xios_output: warning physics timestep is not an integer!"
     109    endif
     110    if (nint(daysec).ne.daysec) then
     111      write(*,*) "initialize_xios_output: warning day length is not an integer!"
     112    endif
     113    ! Important: do no operations involving dates and calendars
     114    ! before defining the calendar!
    97115    CALL xios_define_calendar(type="user_defined", &
    98116                              timestep=timestep, &
    99117                              day_length=nint(daysec), &
    100                               start_date=start_date, &
    101                               time_origin=time_origin, &
    102118                              month_lengths=[30,30,30,30,30,30,30,30,30,30,30,30])
    103    
     119    !NB: it would make more sense to define months and their length in the
     120    ! xml files and not to have them hard coded here.... to be improved...
     121   
     122    ! time origin of the simulation (default: 1st year/1st month/1st day, Ls=0)
     123    time_origin=xios_date(1,1,1,0,0,0)
     124    CALL xios_set_time_origin(time_origin=time_origin)
     125!    if (prt_level>=10) then
     126     write(lunout,*) "initialize_xios_output: time_origin=",time_origin
     127!    endif
     128
     129    ! Now define the start time of this simulation
     130    ! NB: we substract dtphys because we want to set the origin of the time axis
     131    start_date=time_origin+xios_duration(0,0,day,0,0,timeofday*daysec-dtphys)
     132    call xios_set_start_date(start_date=start_date)
     133    if (prt_level>=10) then
     134     write(lunout,*) "initialize_xios_output: start_date=",start_date
     135    endif
     136
    104137    ! 4. Finalize the context:
    105138    if (prt_level>=10) write(*,*) "initialize_xios_output: call wxios_closedef"
Note: See TracChangeset for help on using the changeset viewer.