source: LMDZ4/trunk/libf/dyn3d/ce0l.F90 @ 1425

Last change on this file since 1425 was 1425, checked in by lguez, 14 years ago

Replaced Numerical Recipes procedures for spline interpolation (not in
the public domain) by procedures from the Pchip package in the Slatec
library. This only affects the program "ce0l", not the program
"gcm". Tested on Brodie SX8 with "-debug" and "-prod", "-parallel
none" and "-parallel mpi". "start.nc" and "limit.nc" are
changed. "startphy.nc" is not changed. The relative change is of order
1e-7 or less. The revision makes the program faster (tested on Brodie
with "-prod -d 144x142x39", CPU time is 38 s, instead of 54
s). Procedures from Slatec are untouched, except for
"i1mach.F". Created procedures "pchfe_95" and "pchsp_95" which are
wrappers for "pchfe" and "pchsp" from Slatec. "pchfe_95" and
"pchsp_95" have a safer and simpler interface.

Replaced "make" by "sxgmake" in "arch-SX8_BRODIE.fcm". Added files for
compilation by FCM with "g95".

In "arch-linux-32bit.fcm", replaced "pgf90" by "pgf95". There was no
difference between "dev" and "debug" so added "-O1" to "dev". Added
debugging options. Removed "-Wl,-Bstatic
-L/usr/lib/gcc-lib/i386-linux/2.95.2", which usually produces an error
at link-time.

Bash is now ubiquitous while KornShell? is not so use Bash instead of
KornShell? in FCM.

Replaced some statements "write(6,*)" by "write(lunout,*)". Replaced
"stop" by "stop 1" in the case where "abort_gcm" is called with "ierr
/= 0". Removed "stop" statements at the end of procedures
"limit_netcdf" and main program "ce0l" (why not let the program end
normally?).

Made some arrays automatic instead of allocatable in "start_inter_3d".

Zeroed "wake_pe", "fm_therm", "entr_therm" and "detr_therm" in
"dyn3dpar/etat0_netcdf.F90". The parallel and sequential results of
"ce0l" are thus identical.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.3 KB
RevLine 
[524]1!
[1279]2! $Id: ce0l.F90 1425 2010-09-02 13:45:23Z lguez $
[524]3!
[1319]4!-------------------------------------------------------------------------------
5!
6PROGRAM ce0l
7!-------------------------------------------------------------------------------
8! Purpose: Calls etat0, creates initial states and limit_netcdf
9!
10!     interbar=.T. for barycentric interpolation inter_barxy
11!     extrap  =.T. for data extrapolation, like for the SSTs when file does not
12!                  contain ocean points only.
13!     oldice  =.T. for old-style ice, obtained using grille_m (grid_atob).
14!     masque is created in etat0, passed to limit to ensure consistancy.
15!-------------------------------------------------------------------------------
[1403]16  USE control_mod
[1279]17#ifdef CPP_EARTH
18! This prog. is designed to work for Earth
[1319]19  USE dimphy
20  USE comgeomphy
21  USE infotrac
22
[1279]23#ifdef CPP_IOIPSL
[1319]24  USE ioipsl, ONLY: ioconf_calendar
[1279]25#endif
[524]26
[1319]27#endif
28  IMPLICIT NONE
29#ifndef CPP_EARTH
30  WRITE(lunout,*)'limit_netcdf: Earth-specific routine, needs Earth physics'
31#else
32!-------------------------------------------------------------------------------
33! Local variables:
34  LOGICAL, PARAMETER :: interbar=.TRUE., extrap=.FALSE., oldice=.FALSE.
[524]35#include "dimensions.h"
36#include "paramet.h"
37#include "indicesol.h"
[1319]38#include "iniprint.h"
39#include "temps.h"
40#include "logic.h"
41  INTEGER, PARAMETER            :: longcles=20
42  REAL,    DIMENSION(longcles)  :: clesphy0
43  REAL,    DIMENSION(iip1,jjp1) :: masque
44  CHARACTER(LEN=15)             :: calnd
45!-------------------------------------------------------------------------------
46  CALL conf_gcm( 99, .TRUE. , clesphy0 )
[524]47
[1319]48  CALL Init_Phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))
49  WRITE(lunout,*)'---> klon=',klon
50  CALL InitComgeomphy
[822]51
[1279]52#ifdef CPP_IOIPSL
[1319]53  SELECT CASE(calend)
54    CASE('earth_360d');CALL ioconf_calendar('360d');      calnd='a 360 jours/an'
55    CASE('earth_365d');CALL ioconf_calendar('noleap');    calnd='a 365 jours/an'
56    CASE('earth_366d');CALL ioconf_calendar('366d');      calnd='bissextile'
57    CASE('gregorian'); CALL ioconf_calendar('gregorian'); calnd='gregorien'
58    CASE('standard');  CALL ioconf_calendar('gregorian'); calnd='gregorien'
59    CASE('julian');    CALL ioconf_calendar('julian');    calnd='julien'
60    CASE('proleptic_gregorian'); CALL ioconf_calendar('gregorian')
61  !--- DC Bof...  => IOIPSL a mettre a jour: proleptic_gregorian /= gregorian
62    CASE DEFAULT
63      CALL abort_gcm('ce0l','Mauvais choix de calendrier',1)
64  END SELECT
65  WRITE(lunout,*)'CALENDRIER CHOISI: Terrestre '//TRIM(calnd)
[1279]66#endif
67
[1319]68  IF (config_inca /= 'none') THEN
69#ifdef INCA
70    CALL init_const_lmdz(nbtr,anneeref,dayref,iphysiq,day_step,nday)
71    CALL init_inca_para(iim,jjm+1,klon,1,klon_mpi_para_nb,0)
72    WRITE(lunout,*)'nbtr =' , nbtr
73#endif
74  END IF
[524]75
[1319]76  WRITE(lunout,'(//)')
77  WRITE(lunout,*) '  *********************  '
78  WRITE(lunout,*) '  ***  etat0_netcdf ***  '
79  WRITE(lunout,*) '  *********************  '
80  WRITE(lunout,'(//)')
81  WRITE(lunout,*) ' interbar = ',interbar
82  CALL etat0_netcdf(interbar,masque,ok_etat0)
[524]83
[1319]84  IF(ok_limit) THEN
85  WRITE(lunout,'(//)')
86  WRITE(lunout,*) '  *********************  '
87  WRITE(lunout,*) '  ***  Limit_netcdf ***  '
88  WRITE(lunout,*) '  *********************  '
89  WRITE(lunout,'(//)')
90  CALL limit_netcdf(interbar,extrap,oldice,masque)
91  END IF
92
[1279]93#endif
[1319]94! of #ifndef CPP_EARTH #else
95
96END PROGRAM ce0l
97!
98!-------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.