Ignore:
Timestamp:
Oct 2, 2012, 5:57:45 PM (12 years ago)
Author:
Laurent Fairhead
Message:

Phasage de la dynamique parallèle localisée (petite mémoire) avec la branche LMDZ4V5.0-dev (fin de la branche)
Validation effectuée par comparaison des fichiers de sorties debug (u, v, t, q, masse, etc ...) d'une simulation sans physique
faite avec la version du modèle donnée paY. Meurdesoif et la version phasée avec la r1399 (fin de la branche LMDZ4V5.0-dev)


Phasing of the localised (low memory) parallel dynamics package with the LMDZ4V5.0-dev version of LMDZ
Validation consisted in comparing output debug files (u, v, t, q, masse, etc... ) of a no physics simulation
run with the version of the code given by Y. Meurdesoif and this version phased with r1399 (end of the LMDZ4V5.0-dev branch)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/dyn3dmem/calfis_loc.F

    r1632 r1657  
    11!
    2 ! $Id: calfis_p.F 1299 2010-01-20 14:27:21Z fairhead $
     2! $Id$
    33!
    44C
     
    108108#include "comvert.h"
    109109#include "comgeom2.h"
     110#include "iniprint.h"
    110111#ifdef CPP_MPI
    111112      include 'mpif.h'
     
    180181      REAL,SAVE,ALLOCATABLE ::  flxwfi_omp(:,:)     ! Flux de masse verticale sur la grille physiq
    181182
     183!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     184! Introduction du splitting (FH)
     185! Question pour Yann :
     186! J'ai été surpris au début que les tableaux zufi_omp, zdufi_omp n'co soitent
     187! en SAVE. Je crois comprendre que c'est parce que tu voulais qu'il
     188! soit allocatable (plutot par exemple que de passer une dimension
     189! dépendant du process en argument des routines) et que, du coup,
     190! le SAVE évite d'avoir à refaire l'allocation à chaque appel.
     191! Tu confirmes ?
     192! J'ai suivi le même principe pour les zdufic_omp
     193! Mais c'est surement bien que tu controles.
     194!
     195
     196      REAL,ALLOCATABLE,SAVE :: zdufic_omp(:,:)
     197      REAL,ALLOCATABLE,SAVE :: zdvfic_omp(:,:)
     198      REAL,ALLOCATABLE,SAVE :: zdtfic_omp(:,:)
     199      REAL,ALLOCATABLE,SAVE :: zdqfic_omp(:,:,:)
     200      REAL jH_cur_split,zdt_split
     201      LOGICAL debut_split,lafin_split
     202      INTEGER isplit
     203!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     204
    182205c$OMP THREADPRIVATE(zplev_omp,zplay_omp,zphi_omp,zphis_omp,
    183206c$OMP+                 presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp,
    184207c$OMP+                 zqfi_omp,zdufi_omp,zdvfi_omp,
    185 c$OMP+                 zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp)       
     208c$OMP+                 zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp,
     209c$OMP+                 zdufic_omp,zdvfic_omp,zdtfic_omp,zdqfic_omp)       
    186210
    187211      LOGICAL,SAVE :: first_omp=.true.
     
    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
    241          STOP
     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
     266          STOP
    242267        ENDIF
    243268c$OMP MASTER
     
    533558        allocate(zdtfi_omp(klon,llm))
    534559        allocate(zdqfi_omp(klon,llm,nqtot))
     560        allocate(zdufic_omp(klon,llm))
     561        allocate(zdvfic_omp(klon,llm))
     562        allocate(zdtfic_omp(klon,llm))
     563        allocate(zdqfic_omp(klon,llm,nqtot))
    535564        allocate(zdpsrf_omp(klon))
    536565        allocate(flxwfi_omp(klon,llm))
     
    635664      if (planet_type=="earth") then
    636665#ifdef CPP_EARTH
     666
     667
     668!$OMP MASTER
     669      write(lunout,*) 'PHYSIQUE AVEC NSPLIT_PHYS=',nsplit_phys
     670!$OMP END MASTER
     671      zdt_split=dtphys/nsplit_phys
     672      zdufic_omp(:,:)=0.
     673      zdvfic_omp(:,:)=0.
     674      zdtfic_omp(:,:)=0.
     675      zdqfic_omp(:,:,:)=0.
     676
     677      do isplit=1,nsplit_phys
     678
     679         jH_cur_split=jH_cur+(isplit-1) * dtvr / (daysec *nsplit_phys)
     680         debut_split=debut.and.isplit==1
     681         lafin_split=lafin.and.isplit==nsplit_phys
     682
     683
    637684      CALL physiq (klon,
    638685     .             llm,
    639      .             debut,
    640      .             lafin,
     686     .             debut_split,
     687     .             lafin_split,
    641688     .             jD_cur,
    642      .             jH_cur,
    643      .             dtphys,
     689     .             jH_cur_split,
     690     .             zdt_split,
    644691     .             zplev_omp,
    645692     .             zplay_omp,
     
    663710     .             pducov,
    664711     .             PVteta)
     712
     713         zufi_omp(:,:)=zufi_omp(:,:)+zdufi_omp(:,:)*zdt_split
     714         zvfi_omp(:,:)=zvfi_omp(:,:)+zdvfi_omp(:,:)*zdt_split
     715         ztfi_omp(:,:)=ztfi_omp(:,:)+zdtfi_omp(:,:)*zdt_split
     716         zqfi_omp(:,:,:)=zqfi_omp(:,:,:)+zdqfi_omp(:,:,:)*zdt_split
     717
     718         zdufic_omp(:,:)=zdufic_omp(:,:)+zdufi_omp(:,:)
     719         zdvfic_omp(:,:)=zdvfic_omp(:,:)+zdvfi_omp(:,:)
     720         zdtfic_omp(:,:)=zdtfic_omp(:,:)+zdtfi_omp(:,:)
     721         zdqfic_omp(:,:,:)=zdqfic_omp(:,:,:)+zdqfi_omp(:,:,:)
     722
     723      enddo
     724
     725      zdufi_omp(:,:)=zdufic_omp(:,:)/nsplit_phys
     726      zdvfi_omp(:,:)=zdvfic_omp(:,:)/nsplit_phys
     727      zdtfi_omp(:,:)=zdtfic_omp(:,:)/nsplit_phys
     728      zdqfi_omp(:,:,:)=zdqfic_omp(:,:,:)/nsplit_phys
     729
    665730#endif
    666731      endif !of if (planet_type=="earth")
     
    11161181#else
    11171182      write(*,*) "calfis_p: for now can only work with parallel physics"
     1183      write(lunout,*)
     1184   & "calfis_p: for now can only work with parallel physics"
    11181185      stop
    11191186#endif
Note: See TracChangeset for help on using the changeset viewer.