Ignore:
Timestamp:
Oct 19, 2023, 4:02:57 PM (9 months ago)
Author:
idelkadi
Message:

Merged trunk changes -r4488:4726 LMDZ_ECRad branch

Location:
LMDZ6/branches/LMDZ_ECRad
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ_ECRad

  • LMDZ6/branches/LMDZ_ECRad/libf/phylmd/readaerosol_mod.F90

    r4103 r4727  
    173173
    174174
    175   SUBROUTINE init_aero_fromfile(flag_aerosol)
     175SUBROUTINE init_aero_fromfile(flag_aerosol, aerosol_couple)
    176176  USE netcdf
    177177  USE mod_phys_lmdz_para
    178178  USE mod_grid_phy_lmdz, ONLY: grid_type, unstructured
    179 #ifdef CPP_XIOS
    180   USE xios
    181 #endif
     179  USE lmdz_xios
    182180  IMPLICIT NONE
     181
    183182  INTEGER, INTENT(IN) :: flag_aerosol
    184 #ifdef CPP_XIOS
     183  LOGICAL, INTENT(IN) :: aerosol_couple
     184 
    185185  REAL,ALLOCATABLE :: lat_src(:)
    186186  REAL,ALLOCATABLE :: lon_src(:)
     
    191191  REAL :: null_array(0)
    192192
    193   IF (flag_aerosol>0 .AND. grid_type==unstructured) THEN
     193  IF (using_xios) THEN
     194    IF (flag_aerosol>0 .AND. grid_type==unstructured .AND. (.NOT. aerosol_couple) ) THEN
    194195 
    195     IF (is_omp_root) THEN
     196      IF (is_omp_root) THEN
    196197 
    197       IF (is_mpi_root) THEN
     198        IF (is_mpi_root) THEN
    198199   
    199         IF (nf90_open(TRIM(file_aerosol), NF90_NOWRITE, ncid) /= NF90_NOERR) THEN
    200           CALL check_err( nf90_open(TRIM(file_so4), NF90_NOWRITE, ncid), "pb open "//trim(file_so4) )
     200          IF (nf90_open(TRIM(file_aerosol), NF90_NOWRITE, ncid) /= NF90_NOERR) THEN
     201            CALL check_err( nf90_open(TRIM(file_so4), NF90_NOWRITE, ncid), "pb open "//trim(file_so4) )
     202          ENDIF
     203
     204          ! Read and test longitudes
     205          CALL check_err( nf90_inq_dimid(ncid, "lon", dimID),"pb inq dim lon")
     206          CALL check_err( nf90_inquire_dimension(ncid, dimID, len = nbp_lon_src),"pb inq dim lon")
     207          CALL check_err( nf90_inq_varid(ncid, 'lon', varid),"pb inq lon" )
     208          ALLOCATE(lon_src(nbp_lon_src))
     209          CALL check_err( nf90_get_var(ncid, varid, lon_src(:)),"pb get lon" )
     210
     211          ! Read and test latitudes
     212          CALL check_err( nf90_inq_dimid(ncid, "lat", dimID),"pb inq dim lat")
     213          CALL check_err( nf90_inquire_dimension(ncid, dimID, len = nbp_lat_src),"pb inq dim lat")
     214          CALL check_err( nf90_inq_varid(ncid, 'lat', varid),"pb inq lat" )
     215          ALLOCATE(lat_src(nbp_lat_src))
     216          CALL check_err( nf90_get_var(ncid, varid, lat_src(:)),"pb get lat" )
     217          IF (nf90_inq_dimid(ncid, 'lev', dimid) /= NF90_NOERR) THEN
     218            IF (nf90_inq_dimid(ncid, 'presnivs', dimid)/= NF90_NOERR) THEN
     219               CALL check_err(nf90_inq_dimid(ncid, 'PRESNIVS', dimid),'dimension lev,PRESNIVS or presnivs not in file')
     220            ENDIF
     221          ENDIF
     222          CALL check_err( nf90_inquire_dimension(ncid, dimid, len = klev_src),"pb inq dim for PRESNIVS or lev" )
     223          CALL check_err( nf90_close(ncid),"pb in close" )   
    201224        ENDIF
    202225
    203         ! Read and test longitudes
    204         CALL check_err( nf90_inq_dimid(ncid, "lon", dimID),"pb inq dim lon")
    205         CALL check_err( nf90_inquire_dimension(ncid, dimID, len = nbp_lon_src),"pb inq dim lon")
    206         CALL check_err( nf90_inq_varid(ncid, 'lon', varid),"pb inq lon" )
    207         ALLOCATE(lon_src(nbp_lon_src))
    208         CALL check_err( nf90_get_var(ncid, varid, lon_src(:)),"pb get lon" )
    209 
    210         ! Read and test latitudes
    211         CALL check_err( nf90_inq_dimid(ncid, "lat", dimID),"pb inq dim lat")
    212         CALL check_err( nf90_inquire_dimension(ncid, dimID, len = nbp_lat_src),"pb inq dim lat")
    213         CALL check_err( nf90_inq_varid(ncid, 'lat', varid),"pb inq lat" )
    214         ALLOCATE(lat_src(nbp_lat_src))
    215         CALL check_err( nf90_get_var(ncid, varid, lat_src(:)),"pb get lat" )
    216         IF (nf90_inq_dimid(ncid, 'lev', dimid) /= NF90_NOERR) THEN
    217           IF (nf90_inq_dimid(ncid, 'presnivs', dimid)/= NF90_NOERR) THEN
    218              CALL check_err(nf90_inq_dimid(ncid, 'PRESNIVS', dimid),'dimension lev,PRESNIVS or presnivs not in file')
    219           ENDIF
     226        CALL bcast_mpi(nbp_lat_src)
     227        CALL bcast_mpi(nbp_lon_src)
     228        CALL bcast_mpi(klev_src)
     229
     230        IF (is_mpi_root ) THEN
     231          CALL xios_set_domain_attr("domain_aerosol",nj_glo=nbp_lat_src, nj=nbp_lat_src, jbegin=0, latvalue_1d=lat_src)
     232          CALL xios_set_domain_attr("domain_aerosol",ni_glo=nbp_lon_src, ni=nbp_lon_src, ibegin=0, lonvalue_1d=lon_src)
     233        ELSE
     234          CALL xios_set_domain_attr("domain_aerosol",nj_glo=nbp_lat_src, nj=0, jbegin=0, latvalue_1d=null_array )
     235          CALL xios_set_domain_attr("domain_aerosol",ni_glo=nbp_lon_src, ni=0, ibegin=0, lonvalue_1d=null_array)
    220236        ENDIF
    221         CALL check_err( nf90_inquire_dimension(ncid, dimid, len = klev_src),"pb inq dim for PRESNIVS or lev" )
    222         CALL check_err( nf90_close(ncid),"pb in close" )   
     237        CALL xios_set_axis_attr("axis_aerosol",n_glo=klev_src)
     238        CALL xios_set_fieldgroup_attr("aerosols", enabled=.TRUE.)
     239 
    223240      ENDIF
    224 
    225       CALL bcast_mpi(nbp_lat_src)
    226       CALL bcast_mpi(nbp_lon_src)
    227       CALL bcast_mpi(klev_src)
    228 
    229       IF (is_mpi_root ) THEN
    230         CALL xios_set_domain_attr("domain_aerosol",nj_glo=nbp_lat_src, nj=nbp_lat_src, jbegin=0, latvalue_1d=lat_src)
    231         CALL xios_set_domain_attr("domain_aerosol",ni_glo=nbp_lon_src, ni=nbp_lon_src, ibegin=0, lonvalue_1d=lon_src)
    232       ELSE
    233         CALL xios_set_domain_attr("domain_aerosol",nj_glo=nbp_lat_src, nj=0, jbegin=0, latvalue_1d=null_array )
    234         CALL xios_set_domain_attr("domain_aerosol",ni_glo=nbp_lon_src, ni=0, ibegin=0, lonvalue_1d=null_array)
    235       ENDIF
    236       CALL xios_set_axis_attr("axis_aerosol",n_glo=klev_src)
    237       CALL xios_set_fieldgroup_attr("aerosols", enabled=.TRUE.)
    238  
    239     ENDIF
    240241   
    241   ENDIF   
    242 #endif
    243   END SUBROUTINE init_aero_fromfile
     242    ENDIF   
     243  ENDIF !using_xios
     244END SUBROUTINE init_aero_fromfile
    244245
    245246
     
    271272    USE iophy, ONLY : io_lon, io_lat
    272273    USE print_control_mod, ONLY: lunout
    273 #ifdef CPP_XIOS
    274     USE xios
    275 #endif
     274    USE lmdz_xios
    276275    IMPLICIT NONE
    277276     
     
    685684
    686685    IF (grid_type==unstructured) THEN
    687 #ifdef CPP_XIOS
    688686      IF (is_omp_master) THEN
    689687        CALL xios_send_field(TRIM(varname)//"_in",varyear)
     
    702700      CALL scatter_omp(psurf_interp,psurf_out)
    703701      first=.FALSE.
    704 #endif
    705702    ELSE
    706703      ! Scatter global field to local domain at local process
Note: See TracChangeset for help on using the changeset viewer.