Changeset 3719 for trunk/LMDZ.VENUS


Ignore:
Timestamp:
Apr 11, 2025, 3:56:08 PM (2 months ago)
Author:
emillour
Message:

Venus PCM:
Add reindexing of columns when reading/writing (re)startphy files. This is not
necessary with the lon-lat (LMDZ.COMMON) dynamical core, but required when
using DYNAMICO (where correspondance between dynamics and physics column
indexes changes with number of computing cores).
In addition cleaned up phyetat0: put comments in English, added "only" clauses
to used modules and turned it into a module.
EM

Location:
trunk/LMDZ.VENUS/libf/phyvenus
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.VENUS/libf/phyvenus/iostart.F90

    r901 r3719  
    44    INTEGER,SAVE :: nid_start
    55    INTEGER,SAVE :: nid_restart
    6    
     6!$OMP THREADPRIVATE(nid_start,nid_restart)   
     7
    78    INTEGER,SAVE :: idim1,idim2,idim3,idim4
     9!$OMP THREADPRIVATE(idim1,idim2,idim3,idim4)
    810    INTEGER,PARAMETER :: length=100
    911   
     
    3032
    3133  SUBROUTINE open_startphy(filename)
    32   USE netcdf
    33   USE mod_phys_lmdz_para
    34   IMPLICIT NONE
    35     CHARACTER(LEN=*) :: filename
     34  USE netcdf, ONLY: NF90_OPEN, nf90_strerror, NF90_NOWRITE, NF90_NOERR
     35  USE mod_phys_lmdz_para, ONLY: is_master
     36  IMPLICIT NONE
     37    CHARACTER(LEN=*),INTENT(IN) :: filename
    3638    INTEGER          :: ierr
    3739
    38     IF (is_mpi_root .AND. is_omp_root) THEN
     40    IF (is_master) THEN
    3941      ierr = NF90_OPEN (filename, NF90_NOWRITE,nid_start)
    4042      IF (ierr.NE.NF90_NOERR) THEN
    41         write(6,*)' Pb d''ouverture du fichier '//filename
    42         write(6,*)' ierr = ', ierr
    43         CALL ABORT
     43        write(*,*)'open_startphy: problem opening file '//trim(filename)
     44        write(*,*)trim(nf90_strerror(ierr))
     45        CALL abort_physic("open_startphy","Cannot open file",1)
    4446      ENDIF
    4547    ENDIF
     
    4850
    4951  SUBROUTINE Close_startphy
    50   USE netcdf
    51   USE mod_phys_lmdz_para
     52  USE netcdf, ONLY: NF90_CLOSE
     53  USE mod_phys_lmdz_para, ONLY: is_master
    5254  IMPLICIT NONE
    5355    INTEGER          :: ierr
    5456
    55     IF (is_mpi_root .AND. is_omp_root) THEN
     57    IF (is_master) THEN
    5658        ierr = NF90_CLOSE (nid_start)
    5759    ENDIF
     
    6163
    6264  FUNCTION Inquire_Field(Field_name)
    63   USE netcdf
    64   USE mod_phys_lmdz_para
    65   IMPLICIT NONE
    66     CHARACTER(LEN=*) :: Field_name
     65  USE netcdf, ONLY: NF90_INQ_VARID, NF90_NOERR
     66  USE mod_phys_lmdz_para, only: is_master, bcast
     67  IMPLICIT NONE
     68    CHARACTER(LEN=*),INTENT(IN) :: Field_name
    6769    LOGICAL :: inquire_field
    6870    INTEGER :: varid
    6971    INTEGER :: ierr
    7072   
    71     IF (is_mpi_root .AND. is_omp_root) THEN
     73    IF (is_master) THEN
    7274      ierr=NF90_INQ_VARID(nid_start,Field_name,varid)
    7375      IF (ierr==NF90_NOERR) THEN
     
    127129 
    128130  SUBROUTINE Get_field_rgen(field_name,field,field_size,found)
    129   USE netcdf
    130   USE dimphy
    131   USE mod_grid_phy_lmdz
    132   USE mod_phys_lmdz_para
    133   IMPLICIT NONE
    134     CHARACTER(LEN=*) :: Field_name
    135     INTEGER          :: field_size
    136     REAL             :: field(klon,field_size)
    137     LOGICAL,OPTIONAL :: found
    138    
    139     REAL    :: field_glo(klon_glo,field_size)
     131  USE netcdf, ONLY: NF90_INQ_VARID, NF90_GET_VAR, NF90_NOERR
     132  USE dimphy, ONLY: klon ! number of columns on local grid
     133  USE geometry_mod, ONLY: ind_cell_glo
     134  USE mod_grid_phy_lmdz, ONLY: klon_glo ! number of columns on global grid
     135  USE mod_phys_lmdz_para, ONLY: is_master, bcast, scatter, gather
     136  IMPLICIT NONE
     137    CHARACTER(LEN=*),INTENT(IN) :: Field_name
     138    INTEGER,INTENT(IN) :: field_size
     139    REAL,INTENT(OUT) :: field(klon,field_size)
     140    LOGICAL,OPTIONAL,INTENT(OUT) :: found
     141   
     142    REAL    :: field_glo(klon_glo,field_size) ! field on global grid
     143    REAL :: field_glo_tmp(klon_glo,field_size)
     144    INTEGER :: ind_cell_glo_glo(klon_glo) ! cell indexes on global grid
    140145    LOGICAL :: tmp_found
    141146    INTEGER :: varid
    142     INTEGER :: ierr
    143    
    144     IF (is_mpi_root .AND. is_omp_root) THEN
     147    INTEGER :: ierr, i
     148   
     149    ! gather columns indexes on global grid
     150    CALL gather(ind_cell_glo,ind_cell_glo_glo)
     151
     152    IF (is_master) THEN
    145153 
    146154      ierr=NF90_INQ_VARID(nid_start,Field_name,varid)
    147155     
    148156      IF (ierr==NF90_NOERR) THEN
    149         CALL body(field_glo)
     157        CALL body(field_glo_tmp)
    150158        tmp_found=.TRUE.
    151159      ELSE
     
    153161      ENDIF
    154162   
    155     ENDIF
     163    ENDIF ! of IF (is_master)
    156164   
    157165    CALL bcast(tmp_found)
    158166
    159167    IF (tmp_found) THEN
     168      IF (is_master) THEN
     169        ! reorder columns according to ind_cell_glo(:) indexes
     170        DO i=1,klon_glo
     171          field_glo(i,:)=field_glo_tmp(ind_cell_glo_glo(i),:)
     172        ENDDO
     173      ENDIF
    160174      CALL scatter(field_glo,field)
    161175    ENDIF
     
    165179    ELSE
    166180      IF (.NOT. tmp_found) THEN
    167         PRINT*, 'phyetat0: Le champ <'//field_name//'> est absent'
    168         CALL abort
     181        PRINT*, 'get_field_rgen: Field <'//field_name//'> not found'
     182        CALL abort_physic("get_field_rgen","Failed to find field",1)
    169183      ENDIF
    170184    ENDIF
     
    178192         IF (ierr/=NF90_NOERR) THEN
    179193           ! La variable exist dans le fichier mais la lecture a echouee.
    180            PRINT*, 'phyetat0: Lecture echouee pour <'//field_name//'>'
    181 
    182            IF (field_name=='CLWCON' .OR. field_name=='RNEBCON' .OR. field_name=='RATQS') THEN
    183               ! Essaye de lire le variable sur surface uniqument, comme fait avant
    184               field_glo(:)=0.
    185               ierr=NF90_GET_VAR(nid_start,varid,field_glo(1:klon_glo))
    186               IF (ierr/=NF90_NOERR) THEN
    187                  PRINT*, 'phyetat0: Lecture echouee aussi en 2D pour <'//field_name//'>'
    188                  CALL abort
    189               ELSE
    190                  PRINT*, 'phyetat0: La variable <'//field_name//'> lu sur surface seulement'!, selon ancien format, le reste mis a zero'
    191               END IF
    192            ELSE
    193               CALL abort
    194            ENDIF
     194           PRINT*, 'get_field_rgen: Failed reading <'//field_name//'>'
     195           ! It looks like the following is for Earth physics only...
     196           !IF (field_name=='CLWCON' .OR. field_name=='RNEBCON' .OR. field_name=='RATQS') THEN
     197           !   ! Essaye de lire le variable sur surface uniqument, comme fait avant
     198           !   field_glo(:)=0.
     199           !   ierr=NF90_GET_VAR(nid_start,varid,field_glo(1:klon_glo))
     200           !   IF (ierr/=NF90_NOERR) THEN
     201           !      PRINT*, 'phyetat0: Lecture echouee aussi en 2D pour <'//field_name//'>'
     202           !      CALL abort
     203           !   ELSE
     204           !      PRINT*, 'phyetat0: La variable <'//field_name//'> lu sur surface seulement'!, selon ancien format, le reste mis a zero'
     205           !   END IF
     206           !ELSE
     207          CALL abort_physic("get_field_rgen","Failed to read field",1)
     208           !ENDIF
    195209         ENDIF
    196210
     
    260274
    261275  SUBROUTINE Get_var_rgen(var_name,var,var_size,found)
    262   USE netcdf
    263   USE dimphy
    264   USE mod_grid_phy_lmdz
    265   USE mod_phys_lmdz_para
    266   IMPLICIT NONE
    267     CHARACTER(LEN=*) :: var_name
    268     INTEGER          :: var_size
    269     REAL             :: var(var_size)
    270     LOGICAL,OPTIONAL :: found
     276  USE netcdf, ONLY: NF90_INQ_VARID, NF90_GET_VAR, NF90_NOERR
     277  USE mod_phys_lmdz_para, ONLY: is_master, bcast
     278  IMPLICIT NONE
     279    CHARACTER(LEN=*),INTENT(IN) :: var_name
     280    INTEGER,INTENT(IN) :: var_size
     281    REAL,INTENT(OUT) :: var(var_size)
     282    LOGICAL,OPTIONAL,INTENT(OUT) :: found
    271283   
    272284    LOGICAL :: tmp_found
     
    274286    INTEGER :: ierr
    275287   
    276     IF (is_mpi_root .AND. is_omp_root) THEN
     288    IF (is_master) THEN
    277289 
    278290      ierr=NF90_INQ_VARID(nid_start,var_name,varid)
     
    281293        ierr=NF90_GET_VAR(nid_start,varid,var)
    282294        IF (ierr/=NF90_NOERR) THEN
    283           PRINT*, 'phyetat0: Lecture echouee pour <'//var_name//'>'
    284           CALL abort
     295          PRINT*, 'phyetat0: Failed loading <'//trim(var_name)//'>'
     296          CALL abort_physic("get_var_rgen","Failed to read variable",1)
    285297        ENDIF
    286298        tmp_found=.TRUE.
     
    301313    ELSE
    302314      IF (.NOT. tmp_found) THEN
    303         PRINT*, 'phyetat0: La variable champ <'//var_name//'> est absente'
    304         CALL abort
     315        PRINT*, 'phyetat0: Variable <'//trim(var_name)//'> not found'
     316        CALL abort_physic("get_var_rgen","Failed to read variable",1)
    305317      ENDIF
    306318    ENDIF
     
    310322
    311323  SUBROUTINE open_restartphy(filename)
    312   USE netcdf
    313   USE mod_phys_lmdz_para
    314   USE mod_grid_phy_lmdz
    315   USE dimphy
     324  USE netcdf, ONLY: NF90_CREATE, NF90_CLOBBER, NF90_NOERR, nf90_strerror, &
     325                    NF90_PUT_ATT, NF90_GLOBAL, NF90_DEF_DIM, &
     326                    NF90_ENDDEF
     327  USE mod_phys_lmdz_para,ONLY: is_master
     328  USE mod_grid_phy_lmdz, ONLY: klon_glo
     329  USE dimphy, ONLY: klev, klevp1
    316330  IMPLICIT NONE
    317331    CHARACTER(LEN=*),INTENT(IN) :: filename
    318332    INTEGER                     :: ierr
    319333   
    320     IF (is_mpi_root .AND. is_omp_root) THEN
     334    IF (is_master) THEN
    321335      ierr = NF90_CREATE(filename, NF90_CLOBBER, nid_restart)
    322336      IF (ierr/=NF90_NOERR) THEN
    323         write(6,*)' Pb d''ouverture du fichier '//filename
    324         write(6,*)' ierr = ', ierr
    325         CALL ABORT
     337          write(*,*)'open_restartphy: problem creating file '//trim(filename)
     338          write(*,*)trim(nf90_strerror(ierr))
     339          CALL abort_physic("open_restartphy","Failed creating file",1)
    326340      ENDIF
    327341
     
    339353 
    340354  SUBROUTINE close_restartphy
    341   USE netcdf
    342   USE mod_phys_lmdz_para
     355  USE netcdf, ONLY: NF90_CLOSE
     356  USE mod_phys_lmdz_para, ONLY: is_master
    343357  IMPLICIT NONE
    344358    INTEGER          :: ierr
    345359
    346     IF (is_mpi_root .AND. is_omp_root) THEN
     360    IF (is_master) THEN
    347361      ierr = NF90_CLOSE (nid_restart)
    348362    ENDIF
     
    382396 
    383397  SUBROUTINE put_field_rgen(field_name,title,field,field_size)
    384   USE netcdf
    385   USE dimphy
    386   USE mod_grid_phy_lmdz
    387   USE mod_phys_lmdz_para
     398  USE netcdf, ONLY: NF90_REDEF, NF90_ENDDEF, NF90_DEF_VAR, NF90_PUT_ATT, &
     399                    NF90_PUT_VAR, NF90_FLOAT, NF90_DOUBLE
     400  USE dimphy, ONLY: klon, klev, klevp1
     401  USE mod_grid_phy_lmdz, ONLY: klon_glo
     402  USE mod_phys_lmdz_para, ONLY: is_master, gather
     403  USE geometry_mod, ONLY: ind_cell_glo
     404
    388405  IMPLICIT NONE
    389406  CHARACTER(LEN=*),INTENT(IN)    :: field_name
     
    392409  REAL,INTENT(IN)                :: field(klon,field_size)
    393410 
    394   REAL                           :: field_glo(klon_glo,field_size)
     411  REAL :: field_glo(klon_glo,field_size)
     412  REAL :: field_glo_tmp(klon_glo,field_size)
     413  INTEGER :: ind_cell_glo_glo(klon_glo) ! cell indexes on global grid
     414 
    395415  INTEGER                        :: ierr
    396416  INTEGER                        :: nvarid
    397417  INTEGER                        :: idim
     418  INTEGER :: i
    398419   
    399    
    400     CALL gather(field,field_glo)
    401    
    402     IF (is_mpi_root .AND. is_omp_root) THEN
    403 
     420    ! gather indexes on global grid
     421    CALL gather(ind_cell_glo,ind_cell_glo_glo)
     422    ! gather field on master
     423    CALL gather(field,field_glo_tmp)
     424   
     425    IF (is_master) THEN
     426      ! reorder columns
     427      DO i=1,klon_glo
     428        field_glo(ind_cell_glo_glo(i),:)=field_glo_tmp(i,:)
     429      ENDDO
     430     
    404431      IF (field_size==1) THEN
    405432        idim=idim2
     
    409436        idim=idim4
    410437      ELSE
    411         PRINT *, "erreur phyredem : probleme de dimension"
    412         CALL ABORT
     438        WRITE(*,*)"put_field_rgen error: issue with dimensions"
     439        CALL abort_physic("put_field_rgen","wrong field dimensions",1)
    413440      ENDIF
    414441         
     
    471498
    472499  SUBROUTINE put_var_rgen(var_name,title,var,var_size)
    473   USE netcdf
    474   USE dimphy
    475   USE mod_phys_lmdz_para
     500  USE netcdf, ONLY: NF90_REDEF, NF90_DEF_VAR, NF90_ENDDEF, NF90_PUT_VAR, &
     501                    NF90_PUT_ATT, NF90_FLOAT, NF90_DOUBLE
     502  USE mod_phys_lmdz_para, ONLY: is_master
    476503  IMPLICIT NONE
    477504     CHARACTER(LEN=*),INTENT(IN) :: var_name
     
    483510     INTEGER :: nvarid
    484511         
    485     IF (is_mpi_root .AND. is_omp_root) THEN
     512    IF (is_master) THEN
    486513
    487514      IF (var_size/=length) THEN
    488         PRINT *, "erreur phyredem : probleme de dimension"
    489         CALL abort
     515        WRITE(*,*)"put_var_rgen error: issue with dimensions"
     516        CALL abort_physic("put_var_rgen","wrong field dimensions",1)
    490517      ENDIF
    491518     
  • trunk/LMDZ.VENUS/libf/phyvenus/phyetat0.F90

    r3451 r3719  
    1 !
    2 ! $Id $
    3 !
     1module phyetat0_mod
     2
     3implicit none
     4
     5contains
     6
    47subroutine phyetat0(fichnom)
    58! Load initial state for the physics
    69! and do some resulting initializations
    710
    8       USE dimphy
    9       USE mod_grid_phy_lmdz
    10       USE mod_phys_lmdz_para
    11       USE iophy
    12       USE phys_state_var_mod
    13       USE iostart
    14       use geometry_mod, only: longitude_deg, latitude_deg
    15       USE time_phylmdz_mod, only: itau_phy, raz_date, pdtphys
    16       USE ioipsl_getin_p_mod, only: getin_p
     11  use dimphy, only: klon
     12  use iophy, only: init_iophy_new
     13  use phys_state_var_mod, only: ftsol, ftsoil, age, dlw, falbe, fder, q2, &
     14                                radsol, sollw, sollwdown, solsw, &
     15                                ancien_ok, t_ancien, &
     16                                zmea, zgam, zpic, zsig, zstd, zthe, zval
     17  use iostart, only: get_var, get_field, open_startphy, close_startphy
     18  use geometry_mod, only: longitude_deg, latitude_deg
     19  use time_phylmdz_mod, only: itau_phy, raz_date, pdtphys
     20  use ioipsl_getin_p_mod, only: getin_p
    1721  use nonoro_gwd_ran_mod, only: du_nonoro_gwd, dv_nonoro_gwd, &
    1822                                east_gwstress, west_gwstress
     
    2024implicit none
    2125!======================================================================
    22 ! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
    23 ! Objet: Lecture de l'etat initial pour la physique
    24 !======================================================================
    25 !include "netcdf.inc"
    2626include "dimsoil.h"
    2727include "clesphys.h"
     
    3636REAL :: lon_startphy(klon), lat_startphy(klon)
    3737REAL :: surface_albedo
    38 
    39 ! les variables globales lues dans le fichier restart
     38character(len=8) :: modname="phyetat0"
     39
     40! global variables read in startphy.nc file
    4041
    4142! open physics initial state file:
     
    5051  CALL get_var("controle",tab_cntrl,found)
    5152  IF (.not.found) THEN
    52     PRINT*, 'phyetat0: Le champ <controle> est absent'
    53     CALL abort
     53    write(*,*) modname//': Field <controle> is missing'
     54    call abort_physic(modname,"Missing <controle>",1)
    5455  ENDIF
    5556       
     
    6364  itau_phy = tab_cntrl(15)
    6465
    65 ! Attention si raz_date est active :
    66 ! il faut remettre a zero itau_phy apres phyetat0 !
     66! Warning, if raz_date is active :
     67! itau_phy must be re-set to zero after phyetat0 !
    6768  IF (raz_date.eq.1) THEN
    6869    itau_phy=0
     
    8182  call get_field("latitude",lat_startphy,found)
    8283  IF (.not.found) THEN
    83     PRINT*, 'phyetat0: Le champ <latitude> est absent'
    84     CALL abort
     84    write(*,*) modname//':: Field <latitude> is missing'
     85    call abort_physic(modname,"Missing <latitude>",1)
    8586  ENDIF
    8687  DO i=1,klon
    8788    IF (ABS(lat_startphy(i)-latitude_deg(i))>=0.01) THEN
    88       WRITE(*,*) "phyetat0: Warning! Latitude discrepancy wrt startphy file:",&
     89      WRITE(*,*) modname//": Warning! Latitude discrepancy wrt startphy file:",&
    8990                 " i=",i," lat_startphy(i)=",lat_startphy(i),&
    9091                 " latitude_deg(i)=",latitude_deg(i)
    91       CALL abort
     92      call abort_physic(modname,"<latitude> values discrepency",1)
    9293    ENDIF
    9394  ENDDO
     
    9697  call get_field("longitude",lon_startphy,found)
    9798  IF (.not.found) THEN
    98     PRINT*, 'phyetat0: Le champ <longitude> est absent'
    99     CALL abort
     99    write(*,*)'phyetat0: Field <longitude> is missing'
     100    call abort_physic(modname,"Missing <longitude>",1)
    100101  ENDIF
    101102  DO i=1,klon
    102103    IF (ABS(lon_startphy(i)-longitude_deg(i))>=0.01) THEN
    103       WRITE(*,*) "phyetat0: Warning! Longitude discrepancy wrt startphy file:",&
     104      WRITE(*,*) modname//": Warning! Longitude discrepancy wrt startphy file:",&
    104105                 " i=",i," lon_startphy(i)=",lon_startphy(i),&
    105106                 " longitude_deg(i)=",longitude_deg(i)
    106       CALL abort
     107      call abort_physic(modname,"<latitude> values discrepency",1)
    107108    ENDIF
    108109  ENDDO
     
    115116  CALL get_field("TS",ftsol(:),found)
    116117  IF (.not.found) THEN
    117     PRINT*, 'phyetat0: Le champ <TS> est absent'
    118     PRINT*, "phyetat0: Lecture echouee pour <TS>"
    119     CALL abort
     118    WRITE(*,*) modname//": Field <TS> is missing"
     119    call abort_physic(modname,"Missing <TS>",1)
    120120  ELSE
    121     PRINT*, 'phyetat0: Le champ <TS> est present'
    122     PRINT*,'Temperature du sol <TS>', minval(ftsol), maxval(ftsol)
     121    WRITE(*,*) modname//": Field <TS> is present"
     122    WRITE(*,*) 'Surface temperature <TS>', minval(ftsol), maxval(ftsol)
    123123  ENDIF
    124124ELSE
     
    131131  DO isoil=1, nsoilmx
    132132    IF (isoil.GT.99) THEN
    133        PRINT*, "Trop de couches"
    134        CALL abort
     133       WRITE(*,*) "Too many layers!"
     134       call abort_physic(modname,"Too many subsurface layers",1)
    135135    ENDIF
    136136    WRITE(str2,'(i2.2)') isoil
    137137    CALL get_field('Tsoil'//str2,ftsoil(:,isoil),found)
    138138    IF (.not.found) THEN
    139       PRINT*, "phyetat0: Le champ <Tsoil"//str2//"> est absent"
    140       PRINT*, "          Il prend donc la valeur de surface"
     139      WRITE(*,*) modname//": Field <Tsoil"//str2//"> is missing"
     140      WRITE(*,*) "           it will be nitialized with surface value"
    141141      DO i=1, klon
    142142             ftsoil(i,isoil)=ftsol(i)
     
    153153  CALL get_field("ALBE", falbe,found)
    154154  IF (.not.found) THEN
    155     PRINT*, 'phyetat0: Le champ <ALBE> est absent'
    156     PRINT*, "phyetat0: Lecture echouee pour <ALBE>"
    157     CALL abort
     155    WRITE(*,*) modname//": Field <ALBE> is missing"
     156    call abort_physic(modname,"Missing <ALBE>",1)
    158157  ENDIF
    159158ELSE
     
    163162  falbe(:)=surface_albedo
    164163ENDIF ! of IF (startphy_file)
    165 PRINT*,'Albedo du sol <ALBE>', minval(falbe), maxval(falbe)
    166 
    167 IF (startphy_file) THEN
    168   ! Lecture rayonnement solaire au sol:
     164WRITE(*,*) 'Surface albedo <ALBE>', minval(falbe), maxval(falbe)
     165
     166IF (startphy_file) THEN
     167  ! Solar flux to the surface:
    169168  CALL get_field("solsw",solsw,found)
    170169  IF (.not.found) THEN
    171     PRINT*, 'phyetat0: Le champ <solsw> est absent'
    172     PRINT*, 'mis a zero'
     170    WRITE(*,*) modname//": Field <solsw> is missing"
     171    WRITE(*,*) "set to zero"
    173172    solsw = 0.
    174173  ENDIF
     
    177176  solsw(:)=0
    178177ENDIF ! of IF (startphy_file)
    179 PRINT*,'Rayonnement solaire au sol solsw:', minval(solsw), maxval(solsw)
    180 
    181 IF (startphy_file) THEN
    182   ! Lecture rayonnement IR au sol:
     178WRITE(*,*) 'Solar flux to the surface solsw:', minval(solsw), maxval(solsw)
     179
     180IF (startphy_file) THEN
     181  ! IR flux to the surface:
    183182  CALL get_field("sollw",sollw,found)
    184183  IF (.not.found) THEN
    185     PRINT*, 'phyetat0: Le champ <sollw> est absent'
    186     PRINT*, 'mis a zero'
     184    WRITE(*,*) modname//": Field <sollw> is missing"
     185    WRITE(*,*) "set to zero"
    187186    sollw = 0.
    188187  ENDIF
     
    191190  sollw(:)=0
    192191ENDIF ! of IF (startphy_file)
    193 PRINT*,'Rayonnement IR au sol sollw:', minval(sollw), maxval(solsw)
    194 
    195 IF (startphy_file) THEN
    196   ! Lecture derive des flux:
     192WRITE(*,*) 'IR flux to the surface sollw:', minval(sollw), maxval(solsw)
     193
     194IF (startphy_file) THEN
     195  ! Derivative of the sensible and latent fluxes:
    197196  CALL get_field("fder",fder,found)
    198197  IF (.not.found) THEN
    199     PRINT*, 'phyetat0: Le champ <fder> est absent'
    200     PRINT*, 'mis a zero'
     198    WRITE(*,*) modname//": Field <fder> is missing"
     199    WRITE(*,*) "set to zero"
    201200    fder = 0.
    202201  ENDIF
     
    205204  fder(:)=0
    206205ENDIF ! of IF (startphy_file)
    207 PRINT*,'Derive des flux fder:', minval(fder), maxval(fder)
    208 
    209 IF (startphy_file) THEN
    210   ! Lecture derive flux IR:
     206WRITE(*,*) 'Derivative of the flux fder:', minval(fder), maxval(fder)
     207
     208IF (startphy_file) THEN
     209  ! Derivative of the IR flux:
    211210  CALL get_field("dlw",dlw,found)
    212211  IF (.not.found) THEN
    213     PRINT*, 'phyetat0: Le champ <dlw> est absent'
    214     PRINT*, 'mis a zero'
     212    WRITE(*,*) modname//": Field <dlw> is missing"
     213    WRITE(*,*) "set to zero"
    215214    dlw = 0.
    216215  ENDIF
     
    219218  dlw(:)=0
    220219ENDIF ! of IF (startphy_file)
    221 PRINT*,'Derive flux IR dlw:', minval(dlw), maxval(dlw)
    222 
    223 IF (startphy_file) THEN
    224   ! Lecture rayonnement IR vers le bas au sol:
     220WRITE(*,*) 'Derivative of the IR flux dlw:', minval(dlw), maxval(dlw)
     221
     222IF (startphy_file) THEN
     223  ! Downward IR flux at the surface:
    225224  CALL get_field("sollwdown",sollwdown,found)
    226225  IF (.not.found) THEN
    227     PRINT*, 'phyetat0: Le champ <sollwdown> est absent'
    228     PRINT*, 'mis a zero'
     226    WRITE(*,*) modname//": Field <sollwdown> is missing"
     227    WRITE(*,*) "set to zero"
    229228    sollwdown = 0.
    230229  ENDIF
     
    233232  sollwdown(:)=0
    234233ENDIF ! of IF (startphy_file)
    235 PRINT*,'Flux IR vers le bas au sol sollwdown:', minval(sollwdown), maxval(sollwdown)
    236 
    237 IF (startphy_file) THEN
    238   ! Lecture du rayonnement net au sol:
     234WRITE(*,*) 'Downward IR flux at the surface sollwdown:', minval(sollwdown), maxval(sollwdown)
     235
     236IF (startphy_file) THEN
     237  ! Net flux at the surface:
    239238  CALL get_field("RADS",radsol,found)
    240239  IF (.not.found) THEN
    241     PRINT*, 'phyetat0: Le champ <RADS> est absent'
    242     CALL abort
     240    WRITE(*,*) modname//": Field <RADS> is missing"
     241    call abort_physic(modname,"Missing <RADS>",1)
    243242  ENDIF
    244243ELSE
     
    246245  radsol(:)=0
    247246ENDIF ! of IF (startphy_file)
    248 PRINT*,'Rayonnement net au sol radsol:', minval(radsol), maxval(radsol)
     247WRITE(*,*) 'Net flux at the surface radsol:', minval(radsol), maxval(radsol)
    249248
    250249IF (startphy_file) THEN
     
    252251  CALL get_field("ZMEA",zmea,found)
    253252  IF (.not.found) THEN
    254     PRINT*, 'phyetat0: Le champ <ZMEA> est absent'
    255     PRINT*, 'mis a zero'
     253    WRITE(*,*) modname//": Field <ZMEA> is missing"
     254    WRITE(*,*) "set to zero"
    256255    zmea=0.
    257256  ENDIF
     
    259258  zmea(:)=0
    260259ENDIF ! of IF (startphy_file)
    261 PRINT*,'OROGRAPHIE SOUS-MAILLE zmea:', minval(zmea), maxval(zmea)
     260WRITE(*,*) 'Subgrid scale orography zmea:', minval(zmea), maxval(zmea)
    262261
    263262IF (startphy_file) THEN
     
    265264  CALL get_field("ZSTD",zstd,found)
    266265  IF (.not.found) THEN
    267     PRINT*, 'phyetat0: Le champ <ZSTD> est absent'
    268     PRINT*, 'mis a zero'
     266    WRITE(*,*) modname//": Field <ZSTD> is missing"
     267    WRITE(*,*) "set to zero"
    269268    zstd=0.
    270269  ENDIF
     
    272271  zstd(:)=0
    273272ENDIF ! of IF (startphy_file)
    274 PRINT*,'OROGRAPHIE SOUS-MAILLE zstd:', minval(zstd), maxval(zstd)
     273WRITE(*,*) 'Subgrid scale orography zstd:', minval(zstd), maxval(zstd)
    275274
    276275IF (startphy_file) THEN
     
    278277  CALL get_field("ZSIG",zsig,found)
    279278  IF (.not.found) THEN
    280     PRINT*, 'phyetat0: Le champ <ZSIG> est absent'
    281     PRINT*, 'mis a zero'
     279    WRITE(*,*) modname//": Field <ZSIG> is missing"
     280    WRITE(*,*) "set to zero"
    282281    zsig=0.
    283282  ENDIF
     
    285284  zsig(:)=0
    286285ENDIF ! of IF (startphy_file)
    287 PRINT*,'OROGRAPHIE SOUS-MAILLE zsig:', minval(zsig), maxval(zsig)
     286WRITE(*,*) 'Subgrid scale orography zsig:', minval(zsig), maxval(zsig)
    288287
    289288IF (startphy_file) THEN
     
    291290  CALL get_field("ZGAM",zgam,found)
    292291  IF (.not.found) THEN
    293     PRINT*, 'phyetat0: Le champ <ZGAM> est absent'
    294     PRINT*, 'mis a zero'
     292    WRITE(*,*) modname//": Field <ZGAM> is missing"
     293    WRITE(*,*) "set to zero"
    295294    zgam=0.
    296295  ENDIF
     
    298297  zgam(:)=0
    299298ENDIF ! of IF (startphy_file)
    300 PRINT*,'OROGRAPHIE SOUS-MAILLE zgam:', minval(zgam), maxval(zgam)
     299WRITE(*,*) 'Subgrid scale orography zgam:', minval(zgam), maxval(zgam)
    301300
    302301IF (startphy_file) THEN
     
    304303  CALL get_field("ZTHE",zthe,found)
    305304  IF (.not.found) THEN
    306     PRINT*, 'phyetat0: Le champ <ZTHE> est absent'
    307     PRINT*, 'mis a zero'
     305    WRITE(*,*) modname//": Field <ZTHE> is missing"
     306    WRITE(*,*) "set to zero"
    308307    zthe=0.
    309308  ENDIF
     
    311310  zthe(:)=0
    312311ENDIF ! of IF (startphy_file)
    313 PRINT*,'OROGRAPHIE SOUS-MAILLE zthe:', minval(zthe), maxval(zthe)
     312WRITE(*,*) 'Subgrid scale orography zthe:', minval(zthe), maxval(zthe)
    314313
    315314IF (startphy_file) THEN
     
    317316  CALL get_field("ZPIC",zpic,found)
    318317  IF (.not.found) THEN
    319     PRINT*, 'phyetat0: Le champ <ZPIC> est absent'
    320     PRINT*, 'mis a zero'
     318    WRITE(*,*) modname//": Field <ZPIC> is missing"
     319    WRITE(*,*) "set to zero"
    321320    zpic=0.
    322321  ENDIF
     
    324323  zpic(:)=0
    325324ENDIF ! of IF (startphy_file)
    326 PRINT*,'OROGRAPHIE SOUS-MAILLE zpic:', minval(zpic), maxval(zpic)
     325WRITE(*,*) 'Subgrid scale orography zpic:', minval(zpic), maxval(zpic)
    327326
    328327IF (startphy_file) THEN
     
    330329  CALL get_field("ZVAL",zval,found)
    331330  IF (.not.found) THEN
    332     PRINT*, 'phyetat0: Le champ <ZVAL> est absent'
    333     PRINT*, 'mis a zero'
     331    WRITE(*,*) modname//": Field <ZVAL> is missing"
     332    WRITE(*,*) "set to zero"
    334333    zval=0.
    335334  ENDIF
     
    337336  zval(:)=0
    338337ENDIF ! of IF (startphy_file)
    339 PRINT*,'OROGRAPHIE SOUS-MAILLE zval:', minval(zval), maxval(zval)
     338WRITE(*,*) 'Subgrid scale orography zval:', minval(zval), maxval(zval)
    340339
    341340IF (startphy_file) THEN
     
    345344  CALL get_field("TANCIEN",t_ancien,found)
    346345  IF (.not.found) THEN
    347     PRINT*, "phyetat0: Le champ <TANCIEN> est absent"
    348     PRINT*, "Depart legerement fausse. Mais je continue"
     346    WRITE(*,*) modname//": Field <TANCIEN> is missing"
     347    WRITE(*,*) "Slightly biaised start. But let's keep going."
    349348    ancien_ok = .FALSE.
    350349  ENDIF
     
    368367  CALL get_field("Q2",q2,found)
    369368  IF (.not.found) THEN
    370     PRINT*, 'phyetat0: Le champ <Q2> est absent'
    371     PRINT*, 'mis a zero'
     369    WRITE(*,*) modname//": Field <Q2> is missing"
     370    WRITE(*,*) "set to zero"
    372371    q2(:,:)=0.
    373372  ENDIF
     
    376375  q2(:,:)=0
    377376ENDIF ! of IF (startphy_file)
    378 PRINT*,'Turbulent Kinetic Energy', minval(q2), maxval(q2)
     377WRITE(*,*) 'Turbulent Kinetic Energy', minval(q2), maxval(q2)
    379378
    380379! Non-orographic gravity waves
     
    415414
    416415end subroutine phyetat0
     416
     417end module phyetat0_mod
  • trunk/LMDZ.VENUS/libf/phyvenus/physiq_mod.F

    r3622 r3719  
    9292      use comm_wrf
    9393#else
     94      use phyetat0_mod, only: phyetat0
    9495      use iophy
    9596      use write_field_phy
     
    246247      EXTERNAL hgardfou      ! verifier les temperatures
    247248c     EXTERNAL orbite         ! calculer l'orbite
    248       EXTERNAL phyetat0      ! lire l'etat initial de la physique
    249249      EXTERNAL phyredem      ! ecrire l'etat de redemarrage de la physique
    250250      EXTERNAL radlwsw       ! rayonnements solaire et infrarouge
Note: See TracChangeset for help on using the changeset viewer.