Ignore:
Timestamp:
Jan 22, 2019, 4:21:59 PM (5 years ago)
Author:
Laurent Fairhead
Message:

"Historic" :-) commit merging the physics branch used for DYNAMICO with the LMDZ trunk.
The same physics branch can now be used seamlessly with the traditional lon-lat LMDZ
dynamical core and DYNAMICO.
Testing consisted in running a lon-lat LMDZ bucket simulation with the NPv6.1 physics package
with the original trunk sources and the merged sources. Tests were succesful in the sense that
numeric continuity was preserved in the restart files from both simulation. Further tests
included running both versions of the physics codes for one year in a LMDZOR setting in which
the restart files also came out identical.

Caution:

  • as the physics package now manages unstructured grids, grid information needs to be transmitted

to the surface scheme ORCHIDEE. This means that the interface defined in surf_land_orchidee_mod.F90
is only compatible with ORCHIDEE version orchidee2.1 and later versions. If previous versions of
ORCHIDEE need to be used, the CPP key ORCHIDEE_NOUNSTRUCT needs to be set at compilation time.
This is done automatically if makelmdz/makelmdz_fcm are called with the veget orchidee2.0 switch

  • due to a limitation in XIOS, the time at which limit conditions will be read in by DYNAMICO will be

delayed by one physic timestep with respect to the time it is read in by the lon-lat model. This is caused
by the line

IF (MOD(itime-1, lmt_pas) == 0 .OR. (jour_lu /= jour .AND. grid_type /= unstructured)) THEN ! time to read

in limit_read_mod.F90

Work still needed on COSP integration and XML files for DYNAMICO

EM, YM, LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/iostart.F90

    r3401 r3435  
    117117  USE netcdf
    118118  USE dimphy
     119  USE geometry_mod
    119120  USE mod_grid_phy_lmdz
    120121  USE mod_phys_lmdz_para
     
    126127   
    127128    REAL    :: field_glo(klon_glo,field_size)
     129    REAL    :: field_glo_tmp(klon_glo,field_size)
     130    INTEGER :: ind_cell_glo_glo(klon_glo)
    128131    LOGICAL :: tmp_found
    129132    INTEGER :: varid
    130     INTEGER :: ierr
    131    
    132     IF (is_mpi_root .AND. is_omp_root) THEN
     133    INTEGER :: ierr,i
     134
     135!    IF (is_master) ALLOCATE(ind_cell_glo_glo(1:klon_glo))
     136    CALL gather(ind_cell_glo,ind_cell_glo_glo)
     137   
     138    IF (is_master) THEN
    133139 
    134140      ierr=NF90_INQ_VARID(nid_start,Field_name,varid)
    135141     
    136142      IF (ierr==NF90_NOERR) THEN
    137         CALL body(field_glo)
     143        CALL body(field_glo_tmp)
    138144        tmp_found=.TRUE.
    139145      ELSE
     
    146152
    147153    IF (tmp_found) THEN
     154      IF (is_master) THEN 
     155        DO i=1,klon_glo
     156         field_glo(i,:)=field_glo_tmp(ind_cell_glo_glo(i),:)
     157        ENDDO
     158      ENDIF
    148159      CALL scatter(field_glo,field)
    149160    ENDIF
     
    358369  USE netcdf
    359370  USE dimphy
     371  USE geometry_mod
    360372  USE mod_grid_phy_lmdz
    361373  USE mod_phys_lmdz_para
     
    367379 
    368380  REAL                           :: field_glo(klon_glo,field_size)
    369   INTEGER                        :: ierr
     381  REAL                           :: field_glo_tmp(klon_glo,field_size)
     382!  INTEGER,ALLOCATABLE            :: ind_cell_glo_glo(:)
     383  INTEGER                        :: ind_cell_glo_glo(klon_glo)
     384  INTEGER                        :: ierr,i
    370385  INTEGER                        :: nvarid
    371386  INTEGER                        :: idim
    372387   
    373388   
    374     CALL gather(field,field_glo)
    375    
    376     IF (is_mpi_root .AND. is_omp_root) THEN
     389!    IF (is_master) ALLOCATE(ind_cell_glo_glo(klon_glo))
     390    CALL gather(ind_cell_glo,ind_cell_glo_glo)
     391
     392    CALL gather(field,field_glo_tmp)
     393   
     394    IF (is_master) THEN
     395
     396      DO i=1,klon_glo
     397       field_glo(ind_cell_glo_glo(i),:)=field_glo_tmp(i,:)
     398      ENDDO
     399
    377400
    378401      IF (field_size==1) THEN
Note: See TracChangeset for help on using the changeset viewer.