Ignore:
Timestamp:
Sep 2, 2010, 3:45:23 PM (14 years ago)
Author:
lguez
Message:

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/dyn3d/etat0_netcdf.F90

    r1406 r1425  
    106106  INTEGER :: iflag_thermals_ed, iflag_thermals_optflux
    107107  REAL    :: tau_thermals, solarlong0,  seuil_inversion
    108   INTEGER :: read_climoz ! read ozone climatology 
     108  INTEGER :: read_climoz ! read ozone climatology
    109109!  Allowed values are 0, 1 and 2
    110110!     0: do not read an ozone climatology
     
    140140                   iflag_thermals_ed,iflag_thermals_optflux,            &
    141141                   iflag_coupl,iflag_clos,iflag_wake, read_climoz,      &
    142                    alp_offset )
     142                   alp_offset)
    143143
    144144! co2_ppm0 : initial value of atmospheric CO2 from .def file (co2_ppm value)
     
    291291  q3d(:,:,:,:) = 0.0 ; q3d(:,:,:,1) = qd(:,:,:)
    292292
    293 !     Parameterization of ozone chemistry:
    294 !     Look for ozone tracer:
    295       i = 1
    296       DO
    297          found = tname(i)=="O3" .OR. tname(i)=="o3"
    298          if (found .or. i == nqtot) exit
    299          i = i + 1
    300       end do
    301       if (found) then
    302          call regr_lat_time_coefoz
    303          call press_coefoz
    304          call regr_pr_o3(p3d, q3d(:, :, :, i))
    305 !     Convert from mole fraction to mass fraction:
    306          q3d(:, :, :, i) = q3d(:, :, :, i)  * 48. / 29.
    307       end if
     293! Parameterization of ozone chemistry:
     294! Look for ozone tracer:
     295  i = 1
     296  DO
     297    found = tname(i)=="O3" .OR. tname(i)=="o3"
     298    if (found .or. i == nqtot) exit
     299    i = i + 1
     300  end do
     301  if (found) then
     302    call regr_lat_time_coefoz
     303    call press_coefoz
     304    call regr_pr_o3(p3d, q3d(:, :, :, i))
     305!   Convert from mole fraction to mass fraction:
     306    q3d(:, :, :, i) = q3d(:, :, :, i)  * 48. / 29.
     307  end if
    308308
    309309!--- OZONE CLIMATOLOGY
Note: See TracChangeset for help on using the changeset viewer.