Ignore:
Timestamp:
Jul 1, 2010, 11:02:53 AM (14 years ago)
Author:
Laurent Fairhead
Message:

Merged LMDZ4V5.0-dev branch changes r1292:r1399 to trunk.

Validation:
Validation consisted in compiling the HEAD revision of the trunk,
LMDZ4V5.0-dev branch and the merged sources and running different
configurations on local and SX8 machines comparing results.

Local machine: bench configuration, 32x24x11, gfortran

  • IPSLCM5A configuration (comparison between trunk and merged sources):
    • numerical convergence on dynamical fields over 3 days
    • start files are equivalent (except for RN and PB fields)
    • daily history files equivalent
  • MH07 configuration, new physics package (comparison between LMDZ4V5.0-dev branch and merged sources):
    • numerical convergence on dynamical fields over 3 days
    • start files are equivalent (except for RN and PB fields)
    • daily history files equivalent

SX8 machine (brodie), 96x95x39 on 4 processors:

  • IPSLCM5A configuration:
    • start files are equivalent (except for RN and PB fields)
    • monthly history files equivalent
  • MH07 configuration:
    • start files are equivalent (except for RN and PB fields)
    • monthly history files equivalent

Changes to the makegcm and create_make_gcm scripts to take into account
main programs in F90 files


Fusion de la branche LMDZ4V5.0-dev (r1292:r1399) au tronc principal

Validation:
La validation a consisté à compiler la HEAD de le trunk et de la banche
LMDZ4V5.0-dev et les sources fusionnées et de faire tourner le modéle selon
différentes configurations en local et sur SX8 et de comparer les résultats

En local: 32x24x11, config bench/gfortran

  • pour une config IPSLCM5A (comparaison tronc/fusion):
    • convergence numérique sur les champs dynamiques après 3 jours
    • restart et restartphy égaux (à part sur RN et Pb)
    • fichiers histoire égaux
  • pour une config nlle physique (MH07) (comparaison LMDZ4v5.0-dev/fusion):
    • convergence numérique sur les champs dynamiques après 3 jours
    • restart et restartphy égaux
    • fichiers histoire équivalents

Sur brodie, 96x95x39 sur 4 proc:

  • pour une config IPSLCM5A:
    • restart et restartphy égaux (à part sur RN et PB)
    • pas de différence dans les fichiers histmth.nc
  • pour une config MH07
    • restart et restartphy égaux (à part sur RN et PB)
    • pas de différence dans les fichiers histmth.nc

Changement sur makegcm et create_make-gcm pour pouvoir prendre en compte des
programmes principaux en *F90

Location:
LMDZ4/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk

  • LMDZ4/trunk/libf/dyn3dpar/calfis_p.F

    r1279 r1403  
    3434      USE dimphy
    3535      USE mod_phys_lmdz_para, mpi_root_xx=>mpi_root
     36      USE mod_interface_dyn_phys
     37      USE IOPHY
     38#endif
    3639      USE parallel, ONLY : omp_chunk, using_mpi
    37       USE mod_interface_dyn_phys
    3840      USE Write_Field
    3941      Use Write_field_p
    4042      USE Times
    41       USE IOPHY
    4243      USE infotrac
     44      USE control_mod
    4345
    4446      IMPLICIT NONE
     
    107109#include "comvert.h"
    108110#include "comgeom2.h"
    109 #include "control.h"
     111#include "iniprint.h"
    110112#ifdef CPP_MPI
    111113      include 'mpif.h'
     
    114116c    -----------
    115117      LOGICAL  lafin
    116       REAL heure
    117 
     118!      REAL heure
     119      REAL, intent(in):: jD_cur, jH_cur
    118120      REAL pvcov(iip1,jjm,llm)
    119121      REAL pucov(iip1,jjp1,llm)
     
    128130      REAL pdteta(iip1,jjp1,llm)
    129131      REAL pdq(iip1,jjp1,llm,nqtot)
     132      REAL flxw(iip1,jjp1,llm)  ! Flux de masse verticale sur la grille dynamique
    130133c
    131134      REAL pps(iip1,jjp1)
     
    143146      REAL clesphy0( longcles )
    144147
    145 
     148#ifdef CPP_EARTH
    146149c    Local variables :
    147150c    -----------------
     
    180183      REAL,SAVE,ALLOCATABLE ::  flxwfi_omp(:,:)     ! Flux de masse verticale sur la grille physiq
    181184
     185!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     186! Introduction du splitting (FH)
     187! Question pour Yann :
     188! J'ai été surpris au début que les tableaux zufi_omp, zdufi_omp n'co soitent
     189! en SAVE. Je crois comprendre que c'est parce que tu voulais qu'il
     190! soit allocatable (plutot par exemple que de passer une dimension
     191! dépendant du process en argument des routines) et que, du coup,
     192! le SAVE évite d'avoir à refaire l'allocation à chaque appel.
     193! Tu confirmes ?
     194! J'ai suivi le même principe pour les zdufic_omp
     195! Mais c'est surement bien que tu controles.
     196!
     197
     198      REAL,ALLOCATABLE,SAVE :: zdufic_omp(:,:)
     199      REAL,ALLOCATABLE,SAVE :: zdvfic_omp(:,:)
     200      REAL,ALLOCATABLE,SAVE :: zdtfic_omp(:,:)
     201      REAL,ALLOCATABLE,SAVE :: zdqfic_omp(:,:,:)
     202      REAL jH_cur_split,zdt_split
     203      LOGICAL debut_split,lafin_split
     204      INTEGER isplit
     205!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     206
    182207c$OMP THREADPRIVATE(zplev_omp,zplay_omp,zphi_omp,zphis_omp,
    183208c$OMP+                 presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp,
    184209c$OMP+                 zqfi_omp,zdufi_omp,zdvfi_omp,
    185 c$OMP+                 zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp)       
     210c$OMP+                 zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp,
     211c$OMP+                 zdufic_omp,zdvfic_omp,zdtfic_omp,zdqfic_omp)       
    186212
    187213      LOGICAL,SAVE :: first_omp=.true.
     
    199225      REAL PVteta(klon,ntetaSTD)
    200226     
    201       REAL flxw(iip1,jjp1,llm)  ! Flux de masse verticale sur la grille dynamique
    202227     
    203228      REAL SSUM
     
    207232      SAVE firstcal,debut
    208233c$OMP THREADPRIVATE(firstcal,debut)
    209       REAL, intent(in):: jD_cur, jH_cur
    210234     
    211235      REAL,SAVE,dimension(1:iim,1:llm):: du_send,du_recv,dv_send,dv_recv
     
    235259        debut = .TRUE.
    236260        IF (ngridmx.NE.2+(jjm-1)*iim) THEN
    237          PRINT*,'STOP dans calfis'
    238          PRINT*,'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim'
    239          PRINT*,'  ngridmx  jjm   iim   '
    240          PRINT*,ngridmx,jjm,iim
     261         write(lunout,*) 'STOP dans calfis'
     262         write(lunout,*)
     263     &   'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim'
     264         write(lunout,*) '  ngridmx  jjm   iim   '
     265         write(lunout,*) ngridmx,jjm,iim
    241266         STOP
    242267        ENDIF
     
    498523        allocate(zdtfi_omp(klon,llm))
    499524        allocate(zdqfi_omp(klon,llm,nqtot))
     525        allocate(zdufic_omp(klon,llm))
     526        allocate(zdvfic_omp(klon,llm))
     527        allocate(zdtfic_omp(klon,llm))
     528        allocate(zdqfic_omp(klon,llm,nqtot))
    500529        allocate(zdpsrf_omp(klon))
    501530        allocate(flxwfi_omp(klon,llm))
     
    600629      if (planet_type=="earth") then
    601630#ifdef CPP_EARTH
     631
     632!$OMP MASTER
     633      write(lunout,*) 'PHYSIQUE AVEC NSPLIT_PHYS=',nsplit_phys
     634!$OMP END MASTER
     635      zdt_split=dtphys/nsplit_phys
     636      zdufic_omp(:,:)=0.
     637      zdvfic_omp(:,:)=0.
     638      zdtfic_omp(:,:)=0.
     639      zdqfic_omp(:,:,:)=0.
     640
     641      do isplit=1,nsplit_phys
     642
     643         jH_cur_split=jH_cur+(isplit-1) * dtvr / (daysec *nsplit_phys)
     644         debut_split=debut.and.isplit==1
     645         lafin_split=lafin.and.isplit==nsplit_phys
     646
     647
    602648      CALL physiq (klon,
    603649     .             llm,
    604      .             debut,
    605      .             lafin,
     650     .             debut_split,
     651     .             lafin_split,
    606652     .             jD_cur,
    607      .             jH_cur,
    608      .             dtphys,
     653     .             jH_cur_split,
     654     .             zdt_split,
    609655     .             zplev_omp,
    610656     .             zplay_omp,
     
    628674     .             pducov,
    629675     .             PVteta)
     676
     677         zufi_omp(:,:)=zufi_omp(:,:)+zdufi_omp(:,:)*zdt_split
     678         zvfi_omp(:,:)=zvfi_omp(:,:)+zdvfi_omp(:,:)*zdt_split
     679         ztfi_omp(:,:)=ztfi_omp(:,:)+zdtfi_omp(:,:)*zdt_split
     680         zqfi_omp(:,:,:)=zqfi_omp(:,:,:)+zdqfi_omp(:,:,:)*zdt_split
     681
     682         zdufic_omp(:,:)=zdufic_omp(:,:)+zdufi_omp(:,:)
     683         zdvfic_omp(:,:)=zdvfic_omp(:,:)+zdvfi_omp(:,:)
     684         zdtfic_omp(:,:)=zdtfic_omp(:,:)+zdtfi_omp(:,:)
     685         zdqfic_omp(:,:,:)=zdqfic_omp(:,:,:)+zdqfi_omp(:,:,:)
     686
     687      enddo
     688
     689      zdufi_omp(:,:)=zdufic_omp(:,:)/nsplit_phys
     690      zdvfi_omp(:,:)=zdvfic_omp(:,:)/nsplit_phys
     691      zdtfi_omp(:,:)=zdtfic_omp(:,:)/nsplit_phys
     692      zdqfi_omp(:,:,:)=zdqfic_omp(:,:,:)/nsplit_phys
     693
    630694#endif
    631695      endif !of if (planet_type=="earth")
     
    10471111
    10481112#else
    1049       write(*,*) "calfis_p: for now can only work with parallel physics"
     1113      write(lunout,*)
     1114     & "calfis_p: for now can only work with parallel physics"
    10501115      stop
    10511116#endif
Note: See TracChangeset for help on using the changeset viewer.