Changeset 4103


Ignore:
Timestamp:
Mar 17, 2022, 11:51:36 AM (2 years ago)
Author:
Laurent Fairhead
Message:

Inclusion of some corrections and optimisations for XIOS done by
Arnaud Durocher during his TGCC mission.
Included here are r3703, r3704, r3750, r3751, r3752 from his
LMDZ6/branches/Optimisation_LMDZ branch

Location:
LMDZ6/trunk
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/build_gcm

    r4096 r4103  
    3333${dirname}fcm build $*
    3434
    35 err=$?
    36 # Check error message from fcm build
    37 if [ $err != 0 ] ; then
    38   # ERROR IN COMPILING
    39   echo ERROR IN COMPILING LMDZ : $err
    40   exit 1
    41 fi
     35build_command_status=$?
    4236
    4337# cleanup
    4438\rm -f '.lock'
    4539
     40exit $build_command_status
     41
  • LMDZ6/trunk/libf/dyn3dmem/gcm.F90

    r4050 r4103  
    454454
    455455  !!$OMP PARALLEL DEFAULT(SHARED) COPYIN(/temps/,/logici/,/logicl/)
     456  !     Copy all threadprivate variables in temps_mod logic_mod
    456457  !$OMP PARALLEL DEFAULT(SHARED) &
    457   !     Copy all threadprivate variables in temps_mod
    458458  !$OMP COPYIN(dt,jD_ref,jH_ref,start_time,hour_ini,day_ini,day_end) &
    459459  !$OMP COPYIN(annee_ref,day_ref,itau_dyn,itau_phy,itaufin,calend) &
    460   !     Copy all threadprivate variables from logic_mod
    461460  !$OMP COPYIN(purmats,forward,leapf,apphys,statcl,conser,apdiss,apdelq) &
    462461  !$OMP COPYIN(saison,ecripar,fxyhypb,ysinus,read_start,ok_guide) &
  • LMDZ6/trunk/libf/dyn3dmem/vlsplt_loc.F

    r4052 r4103  
    10741074         ENDDO
    10751075       ENDDO
    1076 c$OMP END DO NO WAIT
     1076c$OMP END DO NOWAIT
    10771077
    10781078c Reindicage vertical en accumulant les flux sur
     
    11141114         ENDDO
    11151115      ENDDO
    1116 c$OMP END DO NO WAIT
     1116c$OMP END DO NOWAIT
    11171117
    11181118      ENDDO ! WHILE (countcfl>=1)
  • LMDZ6/trunk/libf/dynphy_lonlat/phylmd/iniphysiq_mod.F90

    r4056 r4103  
    114114 
    115115!!$OMP PARALLEL DEFAULT(SHARED) COPYIN(/temps/)
    116 !$OMP PARALLEL DEFAULT(SHARED) &
    117116!       Copy all threadprivate variables in temps_mod
    118 !$OMP COPYIN(annee_ref, day_ini, day_ref, start_time)
     117!$OMP PARALLEL DEFAULT(SHARED) COPYIN(annee_ref,day_ini,day_ref,start_time)
    119118
    120119  ! Initialize physical constants in physics:
  • LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_omp_transfert.F90

    r3465 r4103  
    498498    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
    499499
    500     CALL Check_buffer_r(size(VarOut))   
    501     CALL gather_omp_rgen(VarIn,Varout,1,buffer_r)
     500    CALL gather_omp_rgen(VarIn,Varout,1)
    502501   
    503502  END SUBROUTINE gather_omp_r
     
    509508    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    510509    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    511 
    512     CALL Check_buffer_r(size(VarOut))   
    513     CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2),buffer_r)
     510 
     511    CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2))
    514512       
    515513  END SUBROUTINE gather_omp_r1
     
    521519    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    522520    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    523    
    524     CALL Check_buffer_r(size(VarOut))   
    525     CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3),buffer_r)
     521 
     522    CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3))
    526523   
    527524  END SUBROUTINE gather_omp_r2
     
    533530    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    534531    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    535 
    536     CALL Check_buffer_r(size(VarOut))       
    537     CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4),buffer_r)
     532     
     533    CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
    538534   
    539535  END SUBROUTINE gather_omp_r3
     
    10711067
    10721068
    1073   SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize,Buff)
     1069  SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize)
    10741070  USE mod_phys_lmdz_omp_data
    10751071  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
     
    10781074    INTEGER,INTENT(IN) :: dimsize
    10791075    REAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn
    1080     REAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
    1081     REAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
     1076    REAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize),TARGET :: VarOut
     1077
     1078    REAL, POINTER, SAVE :: Varout_ptr(:,:) ! Shared between threads NOT THREADPRIVATE
     1079
     1080    INTEGER :: i,ij
     1081   
     1082    !$omp master
     1083    Varout_ptr => VarOut
     1084    !$omp end master
     1085    !$omp barrier
     1086
     1087    DO i=1,dimsize
     1088      DO ij=1,klon_omp
     1089        Varout_ptr(klon_omp_begin-1+ij,i)=VarIn(ij,i)
     1090      ENDDO
     1091    ENDDO
     1092    !$omp barrier
     1093  END SUBROUTINE gather_omp_rgen
     1094
     1095
     1096  SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff)
     1097  USE mod_phys_lmdz_omp_data
     1098  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
     1099  IMPLICIT NONE
     1100
     1101    INTEGER,INTENT(IN) :: dimsize
     1102    LOGICAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn
     1103    LOGICAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
     1104    LOGICAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
    10821105
    10831106    INTEGER :: i,ij
     
    11001123  !$OMP BARRIER
    11011124
    1102   END SUBROUTINE gather_omp_rgen
    1103 
    1104 
    1105   SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff)
    1106   USE mod_phys_lmdz_omp_data
    1107   USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    1108   IMPLICIT NONE
    1109 
    1110     INTEGER,INTENT(IN) :: dimsize
    1111     LOGICAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn
    1112     LOGICAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
    1113     LOGICAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
    1114 
    1115     INTEGER :: i,ij
    1116    
    1117     DO i=1,dimsize
    1118       DO ij=1,klon_omp
    1119         Buff(klon_omp_begin-1+ij,i)=VarIn(ij,i)
    1120       ENDDO
    1121     ENDDO
    1122   !$OMP BARRIER 
    1123 
    1124 
    1125   !$OMP MASTER
    1126     DO i=1,dimsize
    1127       DO ij=1,klon_mpi
    1128         VarOut(ij,i)=Buff(ij,i)
    1129       ENDDO
    1130     ENDDO 
    1131   !$OMP END MASTER
    1132   !$OMP BARRIER
    1133 
    11341125  END SUBROUTINE gather_omp_lgen
    11351126
  • LMDZ6/trunk/libf/phylmd/cosp/dsd.F90

    r2428 r4103  
    5757  integer, intent(in) :: nsizes
    5858  integer, intent(in) :: dtype
    59   real*8, intent(in)  :: Q,Re,Np,D(nsizes)
     59  real*8, intent(in)  :: Q,Re_,Np,D(nsizes)
    6060  real*8, intent(in)  :: rho_a,tk,dmin,dmax,rho_c,p1,p2,p3
    6161   
     
    7878  real*8 :: tmp1, tmp2
    7979  real*8 :: pi,rc,tc
     80  real*8 :: Re
    8081
    8182  integer k,lidx,uidx
     83
     84  Re = Re_
    8285
    8386  tc = tk - 273.15
  • LMDZ6/trunk/libf/phylmd/cosp/radar_simulator.F90

    r2428 r4103  
    9696  real*8, dimension(hp%nhclass,nprof,ngate), intent(in) :: hm_matrix
    9797  real*8, dimension(hp%nhclass,nprof,ngate), intent(inout) :: re_matrix
    98   real*8, dimension(hp%nhclass,nprof,ngate), intent(in)    :: Np_matrix
     98  real*8, dimension(hp%nhclass,nprof,ngate), intent(inout)    :: Np_matrix
    9999
    100100! ----- OUTPUTS -----
  • LMDZ6/trunk/libf/phylmd/iophy.F90

    r4046 r4103  
    975975  USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat, grid_type, unstructured, regular_lonlat
    976976#ifdef CPP_XIOS
    977   USE xios, ONLY: xios_send_field
     977  USE xios, ONLY: xios_send_field, xios_field_is_active
    978978#endif
    979979  USE print_control_mod, ONLY: lunout, prt_level
     
    996996  INTEGER :: ip
    997997  REAL, ALLOCATABLE, DIMENSION(:) :: fieldok
     998  logical, save :: is_active = .true.
    998999
    9991000  IF (check_dim .AND. is_master) WRITE(lunout,*)'histwrite2d_phy for ',trim(var%name)
     
    10351036
    10361037  ELSE
     1038#ifdef CPP_XIOS
     1039    IF (ok_all_xml) THEN
     1040      !$omp barrier
     1041      !$omp master
     1042      is_active = xios_field_is_active(var%name, at_current_timestep_arg=.false.)
     1043      !$omp end master
     1044      !$omp barrier
     1045      IF(.not. is_active) RETURN
     1046    ENDIF
     1047#endif
    10371048
    10381049    !Et sinon on.... écrit
     
    11761187  USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat, grid_type, regular_lonlat, unstructured
    11771188#ifdef CPP_XIOS
    1178   USE xios, ONLY: xios_send_field
     1189  USE xios, ONLY: xios_send_field, xios_field_is_active
    11791190#endif
    11801191  USE print_control_mod, ONLY: prt_level,lunout
     
    11951206  INTEGER, ALLOCATABLE, DIMENSION(:) :: index3d
    11961207  REAL,ALLOCATABLE, DIMENSION(:,:) :: fieldok
     1208  logical, save :: is_active = .true.
    11971209
    11981210  IF (check_dim .AND. is_master) WRITE(lunout,*)'histwrite3d_phy for ', trim(var%name)
     
    12221234      CALL bcast_omp(swaerofree_diag)
    12231235  ELSE
     1236#ifdef CPP_XIOS
     1237    IF (ok_all_xml) THEN
     1238      !$omp barrier
     1239      !$omp master
     1240      is_active = xios_field_is_active(var%name, at_current_timestep_arg=.false.)
     1241      !$omp end master
     1242      !$omp barrier
     1243      IF(.not. is_active) RETURN
     1244    ENDIF
     1245#endif
     1246
    12241247    !Et sinon on.... écrit
    1225 
    12261248    IF (SIZE(field,1)/=klon .AND. SIZE(field,1)/=klev .AND. SIZE(field,1)/=klev+1) CALL abort_physic('iophy::histwrite3d_phy','Field first DIMENSION not equal to klon/klev',1)
    12271249
  • LMDZ6/trunk/libf/phylmd/mo_simple_plumes.F90

    r3531 r4103  
    280280
    281281    IF ((iweek > ntimes) .OR. (iweek < 1) .OR. (iyear > nyears) .OR. (iyear < 1)) THEN
    282       CALL abort_physic('set_time_weight','Time out of bounds')
     282      CALL abort_physic('set_time_weight','Time out of bounds',1)
    283283    ENDIF
    284284
  • LMDZ6/trunk/libf/phylmd/o3_chem_m.F90

    r2346 r4103  
    8585    ! Heterogeneous chemistry is only during daytime:
    8686    call orbite(real(julien), earth_long, trash1)
    87     call zenang(earth_long, gmtime, pdtphys, rlat, rlon, pmu0, trash2)
     87    call zenang(earth_long, gmtime, 0., pdtphys, rlat, rlon, pmu0, trash2)
    8888    forall (k = 1: nbp_lev)
    8989       where (pmu0 <= cos(87. / 180. * pi)) b(:, k) = 0.
  • LMDZ6/trunk/libf/phylmd/readaerosol_mod.F90

    r3440 r4103  
    1010!$OMP THREADPRIVATE(nbp_lat_src) 
    1111  REAL, ALLOCATABLE, SAVE    :: psurf_interp(:,:)
    12 !$OMP THREADPRIVATE(psurf_interp) 
    1312
    1413CONTAINS
     
    692691        CALL xios_send_field("load_"//TRIM(varname)//"_in",load_glo2D)
    693692        CALL xios_recv_field("load_"//TRIM(varname)//"_out",load_out_mpi)
    694         IF (first) THEN
     693        IF (.not. allocated(psurf_interp)) THEN
     694         ! psurf_interp is a shared array
    695695          ALLOCATE(psurf_interp(klon_mpi,12))
    696696          CALL xios_send_field("psurf_aerosol_in",psurf_glo2D)
  • LMDZ6/trunk/libf/phylmd/rrtm/abor1.intfb.h

    r1990 r4103  
    11INTERFACE
    22SUBROUTINE ABOR1(CDTEXT)
    3 CHARACTER(LEN=*) :: CDTEXT
     3CHARACTER(LEN=*), INTENT(IN) :: CDTEXT
    44END SUBROUTINE ABOR1
    55END INTERFACE
  • LMDZ6/trunk/libf/phylmd/rrtm/tpm_fft.F90

    r2010 r4103  
    77
    88TYPE FFT_TYPE
    9   REAL(KIND=JPRB)   ,POINTER :: TRIGS(:,:)
    10   INTEGER(KIND=JPIM),POINTER :: NFAX(:,:)
     9  REAL(KIND=JPRB)   ,ALLOCATABLE :: TRIGS(:,:)
     10  INTEGER(KIND=JPIM),ALLOCATABLE :: NFAX(:,:)
    1111END TYPE FFT_TYPE
    1212
  • LMDZ6/trunk/makelmdz_fcm

    r4096 r4103  
    770770fi
    771771
     772set +e
     773
    772774rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
    773775./build_gcm ${fcm_path} -j $job $full
     776build_status=$?
    774777
    775778err=$?
     
    790793  \rm -f $LIBFGCM/grid/dimensions.h
    791794fi
     795
     796exit $build_status
Note: See TracChangeset for help on using the changeset viewer.