source: LMDZ5/branches/LMDZ5_AR5/libf/phylmd/press_coefoz_m.F90

Last change on this file was 1403, checked in by Laurent Fairhead, 14 years ago

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

File size: 2.1 KB
Line 
1! $Id$
2module press_coefoz_m
3
4  implicit none
5
6  real, pointer, save:: plev(:)
7  ! (pressure level of Mobidic input data, converted to Pa, in strictly
8  ! ascending order)
9
10  real, allocatable, save:: press_in_edg(:)
11  ! (edges of pressure intervals for Mobidic input data, in Pa, in strictly
12  ! ascending order)
13
14contains
15
16  subroutine press_coefoz
17
18    ! This procedure is called once per "gcm" run.
19    ! A single thread of the root process reads the pressure levels
20    ! from "coefoz_LMDZ.nc" and broadcasts them to the other processes.
21
22    ! We assume that, in "coefoz_LMDZ.nc", the pressure levels are in hPa
23    ! and in strictly ascending order.
24
25    use netcdf95, only: nf95_open, nf95_close, nf95_gw_var, nf95_inq_varid
26    use netcdf, only: nf90_nowrite
27
28    use mod_phys_lmdz_mpi_data, only: is_mpi_root
29    use mod_phys_lmdz_mpi_transfert, only: bcast_mpi ! broadcast
30
31    ! Variables local to the procedure:
32    integer ncid, varid ! for NetCDF
33    integer n_plev ! number of pressure levels in the input data
34    integer k
35
36    !---------------------------------------
37
38    !$omp single
39    print *, "Call sequence information: press_coefoz"
40
41    if (is_mpi_root) then
42       call nf95_open("coefoz_LMDZ.nc", nf90_nowrite, ncid)
43
44       call nf95_inq_varid(ncid, "plev", varid)
45       call nf95_gw_var(ncid, varid, plev)
46       ! Convert from hPa to Pa because "paprs" and "pplay" are in Pa:
47       plev = plev * 100.
48       n_plev = size(plev)
49
50       call nf95_close(ncid)
51    end if
52
53    call bcast_mpi(n_plev)
54    if (.not. is_mpi_root) allocate(plev(n_plev))
55    call bcast_mpi(plev)
56   
57    ! Compute edges of pressure intervals:
58    allocate(press_in_edg(n_plev + 1))
59    if (is_mpi_root) then
60       press_in_edg(1) = 0.
61       ! We choose edges halfway in logarithm:
62       forall (k = 2:n_plev) press_in_edg(k) = sqrt(plev(k - 1) * plev(k))
63       press_in_edg(n_plev + 1) = huge(0.)
64       ! (infinity, but any value guaranteed to be greater than the
65       ! surface pressure would do)
66    end if
67    call bcast_mpi(press_in_edg)
68    !$omp end single
69
70  end subroutine press_coefoz
71
72end module press_coefoz_m
Note: See TracBrowser for help on using the repository browser.