source: LMDZ4/branches/LMDZ4-dev-20091210/libf/dyn3dpar/create_etat0_limit.F @ 5080

Last change on this file since 5080 was 1263, checked in by lguez, 15 years ago

1) Reactivated ability to read ozone (that was deactivated because of
dependency on version of IOIPSL). Added ability to read a pressure
coordinate in Pa in "regr_lat_time_climoz".

2) Added the ability to read a second ozone climatology, corresponding to
daylight ozone:

-- "read_climoz" is now an integer variable, instead of a logical
variable.

-- Added argument "read_climoz" to "phys_state_var_init",
"phys_output_open" and "regr_lat_time_climoz".

-- Created new variable "ozone_daylight" for "hist*.nc" output files.

-- Added a third dimension to variable "wo" in module
"phys_state_var_mod" and variable "POZON" in "radlwsw": index 1 for
average day-night ozone, index 2 for daylight ozone.

-- Added a fourth dimension to variables "o3_in", "o3_regr_lat" and
"o3_out" in "regr_lat_time_climoz": index 1 for average day-night
ozone, index 2 for daylight ozone.

-- In "physiq", moved call to "conf_phys" before call to
"phys_state_var_init". Thus, "conf_phys" is now inside the block "if
(first)" instead of "IF (debut)". There were definitions of "bl95_b0"
and "bl95_b1" that were useless because the variables were overwritten
by "conf_phys". Removed those definitions.

-- In "radlwsw", we pass the average day-night ozone to "LW_LMDAR4"
and the daylight ozone, if we have it, to "SW_LMDAR4" or
"SW_AEROAR4". If we do not have a specific field for daylight ozone
then "SW_LMDAR4" or "SW_AEROAR4" just get the average day-night ozone.

-- "regr_lat_time_climoz" now manages latitudes where the input ozone
field is missing at all levels (polar night).

-- Encapsulated "radlwsw" in a module.

3) Modifications to make sequential and parallel versions of
"create_etat0_limit" almost identical:

-- In "dyn3dpar/create_etat0_limit.F". No need to call
"phys_state_var_init", removed "use phys_state_var_mod" statement. No
need for "clesphys.h", removed "include" statement.

-- In "dyn3dpar/etat0_netcdf.F". Added argument "tau_ratqs" in call to
"conf_phys" (this bug was already corrected in "dyn3d"). Moved call to
"inifilr" after call to "infotrac_init" (as in "dyn3d").

4) Other peripheral modifications:

-- Added procedures "nf95_get_att" and "nf95_def_var_scalar" in
NetCDF95 interface. Overloaded "nf95_put_var" with three more
procedures: "nf95_put_var_FourByteReal", "nf95_put_var_FourByteInt",
"nf95_put_var_1D_FourByteInt".

-- Overloaded "regr1_step_av" with one more procedure:
"regr14_step_av". Overloaded "regr3_lint" with one more procedure:
"regr34_lint".

-- Corrected call to "Init_Phys_lmdz" in "dyn3d/create_etat0_limit.F":
the last argument should be an array, not a scalar.

-- Encapsulated "conf_phys" in a module.

-- Splitted module "regr_pr" into "regr_pr_av_m" and "regr_pr_int_m".

5) Tests:

This revision was compared to revision 1259, with optimization options
"debug" and "dev", parallelization options "none", "mpi", "omp" and
"mpi_omp", 1 and 2 MPI processes, 1 and 2 OpenMP threads, with the
compiler "FORTRAN90/SX Version 2.0 for SX-8". Both programs
"create_etat0_limit" and "gcm" were tested. In all cases,
parallelization does not change the results. With "read_climoz = 0" in
the ".def" files, the results of revision 1259 and of this revision
are the same.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.2 KB
Line 
1!
2! $Id: create_etat0_limit.F 1263 2009-11-17 13:00:14Z abarral $
3!
4       PROGRAM create_etat0_limit
5#ifdef CPP_EARTH
6! This prog. is designed to work for Earth
7       USE dimphy
8       USE comgeomphy
9       USE mod_phys_lmdz_para
10       USE mod_const_mpi
11       USE infotrac
12#ifdef CPP_IOIPSL
13       use ioipsl, only: ioconf_calendar
14#endif
15       IMPLICIT NONE
16c
17c
18c     Programme d'appel a etat0, creation des etats initiaux et limit_netcdf
19c   
20c
21c     interbar = .T . si appel a  interpol. barycentrique inter_barxy
22c
23c     extrap   = .T . si on fait une extrapolation de donnees , comme pour
24c       les  SST  lorsque  le fichier ne contient pas uniquement  des points
25c     oceaniques .
26c
27c     oldice   = .T. si l'on veut garder les anciennes glaces , obtenues
28c     par  grille_m  ( grid_atob ) .
29c
30c     on cree le masque dans etat0 que l'on passe ensuite dans limit pour
31c     garder les coherences
32
33      LOGICAL interbar, extrap , oldice
34      PARAMETER ( interbar = .true. , extrap = .FALSE. , oldice=.false.)
35#include "dimensions.h"
36#include "paramet.h"
37#include "indicesol.h"
38#include  "control.h"
39      REAL :: masque(iip1,jjp1)
40!      REAL :: pctsrf(iim*(jjm-1)+2, nbsrf)
41
42      IF (config_inca /= 'none') THEN
43#ifdef INCA
44         call init_const_lmdz(
45     $        nbtr,anneeref,dayref,
46     $        iphysiq, day_step,nday)
47#endif
48         print *, 'nbtr =' , nbtr
49      END IF
50
51      CALL init_mpi
52
53
54      CALL Init_Phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
55      PRINT *,'---> klon=',klon
56
57      IF (mpi_size>1 .OR. omp_size>1) THEN
58        CALL abort_gcm('create_etat0_limit','In parallel mode,
59     &                 create_etat0_limit must be called only
60     &                 for 1 process and 1 task')
61      ENDIF
62      call InitComgeomphy
63
64#ifdef CPP_IOIPSL
65      call ioconf_calendar('360d')
66#endif
67
68      WRITE(6,*) '  *********************  '
69      WRITE(6,*) ' interbar = ',interbar
70      CALL etat0_netcdf ( interbar, masque )
71c
72      WRITE(6,1)
73      WRITE(6,*) '  *********************  '
74      WRITE(6,*) '  ***  Limit_netcdf ***  '
75      WRITE(6,*) '  *********************  '
76      WRITE(6,1)
77     
78c     
79      CALL  limit_netcdf ( interbar, extrap , oldice, masque)
80
811     FORMAT(//)
82
83#endif
84! of #ifdef CPP_EARTH
85      STOP
86      END
Note: See TracBrowser for help on using the repository browser.