Parent Directory | Revision Log
Sticky Revision: |
Remove module temps. Move variable itau_dyn from module temps to module dynetat0_m, where it is defined. Split module dynetat0_m into dynetat0_m and dynetat0_chosen_m. The motivation is to create smaller modules. Procedures principal_cshift and invert_zoomx had to stay in dynetat0_m because of circular dependency. Now we will be able to move them away. Module variables which are chosen by the user, not computed, in program ce0l go to dynetat0_chosen_m: day_ref, annee_ref, clon, clat, grossismx, grossismy, dzoomx, dzoomy, taux, tauy. Move variable "pa" from module disvert_m to module dynetat0_chosen_m. Define "pa" in dynetat0_chosen rather than etat0. Define day_ref and annee_ref in procedure read_serre rather than etat0.
Rename module dimens_m to dimensions.
Move Sources/* to root directory.
Added argument itau_phy to ini_histins, phyetat0, phytrac and phyredem0. Removed variable itau_phy of module temps. Avoiding side effect in etat0 and phyetat0. The procedures ini_histins, phyetat0, phytrac and phyredem0 are all called by physiq so there is no cascading variable penalty. In procedure inifilr, made the condition on colat0 weaker to allow for rounding error. Removed arguments flux_o, flux_g and t_slab of clmain, flux_o and flux_g of clqh and interfsurf_hq, tslab and seaice of phyetat0 and phyredem. NetCDF variables TSLAB and SEAICE no longer in restartphy.nc. All these variables were related to the not-implemented slab ocean. seaice and tslab were just set to 0 in phyetat0 and never used nor changed. flux_o and flux_g were computed in clmain but never used in physiq. Removed argument swnet of clqh. Was used only to compute a local variable, swdown, which was not used.
In inifilr_hemisph, colat0 is necessarily >= 1. / rlamda(iim) (see notes) so we simplify the definition of jfilt. No need to keep modfrst values at other latitudes than the current one, and we can have one loop on latitudes instead of two. Just encapsulated transp into a module.
In order to be able to choose finer resolutions, set large memory model in compiler options and use dynamic libraries. Variables rlatd, rlond, cuphy and cvphy of module comgeomphy were never used. (In LMDZ, they are used only for Orchid.) There is a bug in PGI Fortran 13.10 that does not accept the combination of forall, pack and spread in regr_pr_av and regr_pr_int. In order to circumvent this bug, created the function gr_dyn_phy. In program test_inifilr, use a single latitude coordinate for north and south.
Added program test_inifilr. Encapsulated ppm3d into a module and added implicit none. Removed unused argument dum. Encountered a problem in procedure invert_zoom_x. With grossismx=2.9, DZOOMX=0.3, taux=5, for xuv = -0.25, for i = 1, rtsafe fails because fval is about 1e-16 instead of 0 at xval = pi. So distinguished the cases abs_y = 0 or pi. Needed then to add argument beta to invert_zoom_x. Moved the output of eignvalues of differentiation matrix from inifilr to inifgn, where they are computed. Simpler definition of j1 in inifilr.
Split ppm3d.f into files containing a single procedure. Factorized computations of filtering matrices into a procedure inifilr_hemisph. Had then to change the matrices from allocatable to pointer and from customized lower bound to lower bound 1. The change in lower bounds does not matter because the matrices are only used as a whole as actual arguments. Also, in infilr, instead of finding jfilt[ns][uv] from approximately jjm /2, start at index j1 that corresponds to the equator. This is not the same if there is a zoom in latitude. Also, the test (rlamda(modfrst[ns][uv](j)) * cos(rlat[uv](j)) < 1) in the loops on filtered latitudes is not useful now that we start from j1: it is necessarily true. See notes. Just encapsulated lwvn into a module and removed unused argument ktraer.
In procedure inifilr, no use keeping values of coefil for all latitudes. Just reuse a one-dimensional array. We can do this by moving computation of coefil in the loops for computation of filtering matrices. We avoid a redundant computation of coefil by putting the computation of direct and inverse matrices inside a same loop on latitudes. Instead of writing to output file only modfrst, also write associated latitudes and whether a mode to filter was found. If a mode was not found (rlamda(modfrst(j)) * cos(rlat(j)) >= 1.) then the filtering matrix at this latitude is null. So we move this test at the highest level inside the loop on filtered latitudes. Note that, by doing so, we do not need to initialize coefil at 0 any longer.
In procedure inifilr, coefilu2 and coefilv2 were not used. coefilu and coefilv were defined and used only at filtered latitudes so split them into north and south arrays. Values in eignvl are necessarily negative. Simplified the computation of eignft.
In procedure cltracrn, no need for local variable zx_trs, use directly local_trs. In (re)startphy.nc, agglomerate variables for different surface types into a single variable with an added dimension. In phyredem, bring together all definitions, do not use redef.
Removed argument dtphys of physiq. Use it directly from comconst in physiq instead. Donwgraded variables eignfnu, eignfnv of module inifgn_m to dummy arguments of SUBROUTINE inifgn. They were not used elsewhere than in the calling procedure inifilr. Renamed argument dv of inifgn to eignval_v. Made alboc and alboc_cd independent of the size of arguments. Now we can call them only at indices knindex in interfsurf_hq, where we need them. Fixed a bug in alboc_cd: rmu0 was modified, and the corresponding actual argument in interfsurf_hq is an intent(in) argument of interfsurf_hq. Variables of size knon instead of klon in interfsur_lim and interfsurf_hq. Removed argument alb_new of interfsurf_hq because it was the same than alblw. Simplified test on cycle_diurne, following LMDZ. Moved tests on nbapp_rad from physiq to read_clesphys2. No need for separate counter itaprad, we can use itap. Define lmt_pas and radpas from integer input parameters instead of real-type computed values.
In procedure inifilr, only a part of the arrays modfrstu and modfrstv were defined. Split these into 4 arrays that are fully defined and used: modfrst[ns][uv]. Clarified the logic for the computation of jfilt[ns][uv]. Changed the initial value of the search so that the initial values for northern hemisphere and southern hemisphere cannot be the same. Clarified the logic for the computation of modfrst[ns][uv]: removed the cycle and exit instructions.
Removed argument d of procedure acc. Was probably here just because automatic arrays were unknown. eigen_sort was eigsrt from Numerical Recipes. In procedure inifilr, create file "eignvl.txt" instead of writing to standard output.
Changed unit of variables lat_min_guide and lat_max_guide from module conf_guide_m from degrees to rad. Then we do not have to convert the whole array rlat from rad to degrees in SUBROUTINE tau2alpha. Removed some useless computations in inigeom. Removed module coefils. Moved variables sddv, unsddv, sddu, unsddu, eignfnu, eignfnv of module coefils to module inifgn_m. Downgraded variables coefilu, coefilu2, coefilv, coefilv2, modfrstu, modfrstv of module coefils to local variables of SUBROUTINE inifilr. Write and read a 3-dimensional variable Tsoil in restartphy.nc and startphy.nc instead of multiple variables for the different subs-urfaces and soil layers. This does not allow any longer to provide only the surface value in startphy.nc and spread it to other layers. Instead, if necessary, pre-process the file startphy.nc to spread the surface value.
dynetat0 read rlonu, rlatu, rlonv, rlatv, cu_2d, cv_2d, aire_2d from "start.nc" and then these variables were overwritten by inigeom. Corrected this. Now, inigeom does not compute rlonu, rlatu, rlonv and rlatv. Moreover, cu_2d, cv_2d, aire_2d are not written to "restart.nc". Since xprimu, xprimv, xprimm025, xprimp025, rlatu1, rlatu2, yprimu1, yprimu2 are computed at the same time as rlonu, rlatu, rlonv, rlatv, and since it would not be convenient to separate those computations, we decide to write xprimu, xprimv, xprimm025, xprimp025, rlatu1, rlatu2, yprimu1, yprimu2 into "restart.nc", read them from "start.nc" and not compute them in inigeom. So, in summary, "start.nc" contains all the coordinates and their derivatives, and inigeom only computes the 2D-variables. Technical details: Moved variables rlatu, rlonv, rlonu, rlatv, xprimu, xprimv from module comgeom to module dynetat0_m. Upgraded local variables rlatu1, yprimu1, rlatu2, yprimu2, xprimm025, xprimp025 of procedure inigeom to variables of module dynetat0_m. Removed unused local variable yprimu of procedure inigeom and corresponding argument yyprimu of fyhyp. Moved variables clat, clon, grossismx, grossismy, dzoomx, dzoomy, taux, tauy from module serre to module dynetat0_m (since they are read from "start.nc"). The default values are now defined in read_serre instead of in the declarations. Changed name of module serre to read_serre_m, no more module variable here. The calls to fxhyp and fyhyp are moved from inigeom to etat0. Side effects in programs other than gcm: etat0 and read_serre write variables of module dynetat0; the programs test_fxyp and test_inter_barxy need more source files. Removed unused arguments len and nd of cv3_tracer. Removed unused argument PPSOL of LWU. Bug fix in test_inter_barxy: forgotten call to read_serre.
Clarified the logic in filtreg by creating a procedure filtreg_hemisph. It was terrible with a loop on hemispheres and tests on hemisphere inside the loop, plus maddening indirections on latitude bounds, plus repeated code. Went from 126 lines to much clearer 74 + 32 = 106 lines. In module inifilr_m, finally made the arrays matrice[uv][ns], matrinv[ns] dynamic (following LMDZ). Changed the lower bound of matriceun and matrinvn in the 3rd dimension: 2 instead of 1, the index 1 was not defined (nor used). In module inifilr_m, changed the bounds of matriceus and matrinvs in the 3rd dimension: jfiltsu:jjm instead of 1:jjm - jfiltsu + 1. Changed the bounds of matricevs in the 3rd dimension: jfiltsv:jjm instead of 1:jjm - jfiltsv + 1. It is a little simpler and clearer this way in procedure inifilr.
Sources inside, compilation outside.
Removed procedure jacobi, which was a copy of the file from Numerical Recipes in Fortran 77. Refer to the Numer_Rec_95 library instead. There was a strange line in procedure coordij: j cannot be equal to 0 after the loop on j.
Moved the call to read_serre out of conf_gcm so that it can be called only in the program ce0l, not in gcm. In gcm, variables of module serre are read from start file. Added reading of dzoomx, dzoomy, taux, tauy from start file, in dynetat0. Those variables were written by dynredem0 but not read. Removed possibility fxyhypb = false, because the geometric part of the program is such a mess. Could then remove variables transx, transy, alphax, alphay, pxo, pyo of module serre. Bug fix in tau2alpha: missing save attributes. The first call to tau2alpha needs to compute dxdyu and dxdyv regardless of value of argument type, because they will be needed for subsequent calls to tau2alpha with various values of argument type.
Changed all ".f90" suffixes to ".f".
Moved everything out of libf.
Write used namelists to file "" instead of standard output. Avoid aliasing in "inidissip" in calls to "divgrad2", "divgrad", "gradiv2", "gradiv", "nxgraro2" and "nxgrarot". Add a degenerate dimension to arrays so they have rank 3, like the dummy arguments in "divgrad2", "divgrad", "gradiv2", "gradiv", "nxgraro2" and "nxgrarot". Extract the initialization part from "bilan_dyn" and make a separate procedure, "init_dynzon", from it. Move variables from modules "iniprint" and "logic" to module "conf_gcm_m". Promote internal procedures of "fxy" to private procedures of module "fxy_m". Extracted documentation from "inigeom". Removed useless "save" attributes. Removed useless intermediate variables. Extracted processing of poles from loop on latitudes. Write coordinates to file "longitude_latitude.txt" instead of standard output. Do not use ozone tracer for radiative transfer.
Removed Numerical Recipes procedure "ran1". Replaced calls to "ran1" in "inidissip" by calls to intrinsic procedures. Split file "interface_surf.f90" into a file with a module containing only variables, "interface_surf", and single-procedure files. Gathered files into directory "Interface_surf". Added argument "cdivu" to "gradiv" and "gradiv2", "cdivh" to "divgrad2" and "divgrad", and "crot" to "nxgraro2" and "nxgrarot". "dissip" now uses variables "cdivu", "cdivh" and "crot" from module "inidissip_m", so it can pass them to "gradiv2", etc. Thanks to this modification, we avoid a circular dependency betwwen "inidissip.f90" and "gradiv2.f90", etc. The value -1. used by "gradiv2", for instance, during computation of eigenvalues is not the value "cdivu" computed by "inidissip". Extracted procedure "start_inter_3d" from module "startdyn", to its own module. In "inidissip", unrolled loop on "ii". I find it clearer now. Moved variables "matriceun", "matriceus", "matricevn", "matricevs", "matrinvn" and "matrinvs" from module "parafilt" to module "inifilr_m". Moved variables "jfiltnu", "jfiltnv", "jfiltsu", "jfiltsv" from module "coefils" to module "inifilr_m".
"alpha" useless, always 0, in "exner_hyb".
Split "stringop.f90" into single-procedure files. Gathered files in directory "IOIPSL/Stringop". Split "flincom.f90" into "flincom.f90" and "flinget.f90". Removed unused procedures from module "flincom". Removed unused argument "filename" of procedure "flinopen_nozoom". Removed unused files. Split "grid_change.f90" into "grid_change.f90" and "gr_phy_write_3d.f90". Removed unused procedures from modules "calendar", "ioipslmpp", "grid_atob", "gath_cpl" and "getincom". Removed unused procedures in files "ppm3d.f" and "thermcell.f". Split "mathelp.f90" into "mathelp.f90" and "mathop.f90". Removed unused variable "dpres" of module "comvert". Use argument "itau" instead of local variables "iadvtr" and "first" to control algorithm in procedure "fluxstokenc". Removed unused arguments of procedure "integrd". Removed useless computations at the end of procedure "leapfrog". Merged common block "matrfil" into module "parafilt".
Simplified "etat0_lim.sh" and "gcm.sh" because the full versions depended on personal arrangements for directories and machines. Translated included files into modules. Encapsulated procedures into modules. Moved variables from module "comgeom" to local variables of "inigeom". Deleted some unused variables in "comgeom". Moved variable "day_ini" from module "temps" to module "dynetat0_m". Removed useless test on variable "time" and useless "close" statement in procedure "leapfrog". Removed useless call to "inigeom" in procedure "limit".
Created module from included file parafilt. Converted caldyn0 to free format. Added a rule to create cross-references with NAG. Added optional attribute in iniadvtrac. Suppressed argument nq in dynredem0 and dynredem1, using nqmx instead. Replaced some NetCDF calls by netcdf95 calls in dynredem0. Added intent attribute in dynredem0 and dynredem1. Annotated use statements with only clause, in dynredem1. Suppressed variable nq and argument of iniadvtrac in etat0. Added test on nqmx in etat0.
Initial import
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, enter a numeric revision.
ViewVC Help | |
Powered by ViewVC 1.1.21 |