From 820345e7a5b36d757d6f723d865dacaf5700f833 Mon Sep 17 00:00:00 2001 From: Juan Escobar <juan.escobar@aero.obs-mip.fr> Date: Wed, 16 Sep 2015 14:33:15 +0000 Subject: [PATCH] Juan 15/09/2015: WENO5 & JPHEXT<>1 variable --- .../001_prep_ideal_case/PRE_IDEA1.nam | 4 +- .../KTEST/001_2Drelief/002_mesonh/EXSEG1.nam | 4 +- .../001_prep_ideal_case/PRE_IDEA1.nam | 4 +- .../KTEST/002_3Drelief/002_mesonh/EXSEG1.nam | 5 +- .../001_prep_ideal_case/PRE_IDEA1.nam | 4 +- MY_RUN/KTEST/003_KW78/002_mesonh/EXSEG1.nam | 4 +- .../004_Reunion/001_prep_pgd/PRE_PGD1.nam | 3 + .../002_prep_ideal_case/PRE_IDEA1.nam | 4 +- .../KTEST/004_Reunion/003_mesonh/EXSEG1.nam | 4 +- .../KTEST/007_16janvier/001_pgd1/PRE_PGD1.nam | 3 + .../KTEST/007_16janvier/002_pgd2/PRE_PGD1.nam | 3 + .../007_16janvier/003_nest/PRE_NEST_PGD1.nam | 3 + .../007_16janvier/004_arp2lfi/PRE_REAL1.nam | 3 + .../007_16janvier/006_preal/PRE_REAL1.nam | 4 +- .../007_16janvier/008_run2/EXSEG1.nam.src | 6 +- MY_RUN/KTEST/012_dust/001_pgd1/PRE_PGD1.nam | 4 + .../002_ecmwf2lfi/PRE_REAL1.nam.20000924.00 | 3 +- .../002_ecmwf2lfi/PRE_REAL1.nam.20000924.12 | 3 +- .../002_ecmwf2lfi/PRE_REAL1.nam.20000925.00 | 3 +- .../012_dust/002_ecmwf2lfi/run_ecmwf2lfi_xyz | 2 + MY_RUN/KTEST/012_dust/003_run/EXSEG1.nam | 8 +- src/LIB/SURCOUCHE/src/fmread_ll.f90 | 9 +- src/LIB/SURCOUCHE/src/fmwrit_ll.f90 | 10 +- src/LIB/SURCOUCHE/src/mode_distriblb.f90 | 30 +- src/LIB/SURCOUCHE/src/mode_double_double.f90 | 102 ++--- src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 | 12 +- src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 | 12 +- src/LIB/SURCOUCHE/src/mode_mppdb.f90 | 143 ++++--- src/LIB/SURCOUCHE/src/mode_nest_ll.f90 | 76 ++-- src/LIB/SURCOUCHE/src/mode_sum_ll.f90 | 177 ++++++++- src/LIB/SURCOUCHE/src/mode_tools_ll.f90 | 16 +- src/MNH/adv_boundaries.f90 | 17 +- src/MNH/advec_3rd_order_aux.f90 | 138 ++++--- src/MNH/advecmet_4th.f90 | 27 +- src/MNH/advecscalar_4th.f90 | 11 +- src/MNH/advection_metsv.f90 | 12 +- src/MNH/advection_uvw.f90 | 6 +- src/MNH/advecuvw_rk.f90 | 226 +++++++---- src/MNH/advecuvw_weno_k.f90 | 129 +++---- src/MNH/anel_balancen.f90 | 3 +- src/MNH/bikhardt.f90 | 29 +- src/MNH/boundaries.f90 | 351 ++++++++++-------- src/MNH/budget.f90 | 3 +- src/MNH/call_rttov.f90 | 7 +- src/MNH/ch_aqueous_sedim1mom.f90 | 6 +- src/MNH/ch_aqueous_sedimc2r2.f90 | 8 +- src/MNH/ch_aqueous_sedimkhko.f90 | 6 +- src/MNH/ch_aqueous_tmicc2r2.f90 | 8 +- src/MNH/ch_aqueous_tmicice.f90 | 6 +- src/MNH/ch_aqueous_tmickess.f90 | 6 +- src/MNH/ch_aqueous_tmickhko.f90 | 6 +- src/MNH/change_gribex_var.f90 | 67 ++-- src/MNH/check_zs.f90 | 8 +- src/MNH/convection.f90 | 7 +- src/MNH/define_maskn.f90 | 6 +- src/MNH/dflux_corr.f90 | 15 +- src/MNH/diag.f90 | 7 +- src/MNH/dyn_sources.f90 | 12 +- src/MNH/elec_trid.f90 | 2 +- src/MNH/endstep.f90 | 6 +- src/MNH/extract_vortex.f90 | 10 +- src/MNH/fast_terms.f90 | 5 +- src/MNH/fill_sonfieldn.f90 | 10 +- src/MNH/flash_geom_elec.f90 | 8 +- src/MNH/get_sizex_lb.f90 | 24 +- src/MNH/get_sizey_lb.f90 | 24 +- src/MNH/gradient_m.f90 | 16 +- src/MNH/gravity.f90 | 8 +- src/MNH/ice_adjust.f90 | 8 +- src/MNH/ice_adjust_elec.f90 | 8 +- src/MNH/ini_lb.f90 | 58 +-- src/MNH/ini_les_cart_maskn.f90 | 2 +- src/MNH/ini_modeln.f90 | 61 +-- src/MNH/ini_one_wayn.f90 | 14 +- src/MNH/ini_prog_var.f90 | 47 ++- src/MNH/ini_segn.f90 | 2 +- src/MNH/ini_size_spawn.f90 | 14 +- src/MNH/ini_sizen.f90 | 23 +- src/MNH/ini_spawn_lsn.f90 | 15 +- src/MNH/interp3d.f90 | 8 +- src/MNH/ion_attach_elec.f90 | 7 +- src/MNH/ion_bound4drift.f90 | 6 +- src/MNH/ion_drift.f90 | 6 +- src/MNH/khko_notadjust.f90 | 7 +- src/MNH/lidar.f90 | 7 +- src/MNH/mesonh.f90 | 3 +- src/MNH/mnhopen_aux_io_surf.f90 | 13 + src/MNH/modd_conf.f90 | 4 +- src/MNH/modd_parameters.f90 | 8 +- src/MNH/mode_gridcart.f90 | 9 +- src/MNH/mode_interpol_beam.f90 | 13 +- src/MNH/modeln.f90 | 19 +- src/MNH/modn_conf.f90 | 6 +- src/MNH/num_diff.f90 | 274 +++++++------- src/MNH/one_wayn.f90 | 22 +- src/MNH/open_nestpgd_files.f90 | 10 +- src/MNH/pgdfilter.f90 | 17 +- src/MNH/polar_calc.f90 | 9 +- src/MNH/polar_mean.f90 | 16 +- src/MNH/prep_ideal_case.f90 | 198 ++++++---- src/MNH/prep_nest_pgd.f90 | 50 ++- src/MNH/prep_pgd.f90 | 9 + src/MNH/prep_real_case.f90 | 10 +- src/MNH/pressure_in_prep.f90 | 8 +- src/MNH/pressurez.f90 | 54 +-- src/MNH/qlap.f90 | 46 ++- src/MNH/rad_bound.f90 | 52 +-- src/MNH/radar_simulator.f90 | 6 +- src/MNH/radtr_satel.f90 | 8 +- src/MNH/rain_c2r2_khko.f90 | 16 +- src/MNH/rain_ice.f90 | 8 +- src/MNH/rain_ice_elec.f90 | 9 +- src/MNH/read_exsegn.f90 | 9 +- src/MNH/read_hgridn.f90 | 18 + src/MNH/read_prc_fmfile.f90 | 90 ++--- src/MNH/relaxation.f90 | 45 ++- src/MNH/resolved_cloud.f90 | 56 +-- src/MNH/resolved_elecn.f90 | 8 +- src/MNH/retrieve2_nest_infon.f90 | 6 +- src/MNH/series_cloud_elec.f90 | 7 +- src/MNH/set_advfrc.f90 | 6 +- src/MNH/set_cstn.f90 | 18 +- src/MNH/set_dircos.f90 | 2 +- src/MNH/set_mass.f90 | 90 +++-- src/MNH/set_msk.f90 | 7 +- src/MNH/set_perturb.f90 | 6 +- src/MNH/set_relfrc.f90 | 6 +- src/MNH/set_rsou.f90 | 15 +- src/MNH/shuman.f90 | 47 ++- src/MNH/slow_terms.f90 | 5 +- src/MNH/spawn_grid2.f90 | 13 +- src/MNH/spawn_model2.f90 | 87 ++--- src/MNH/spawn_zs.f90 | 76 ++-- src/MNH/spawning.f90 | 9 + src/MNH/tke_eps_sources.f90 | 12 +- src/MNH/tridz.f90 | 22 +- src/MNH/turb_hor_dyn_corr.f90 | 8 +- src/MNH/turb_hor_splt.f90 | 7 +- src/MNH/turb_ver_dyn_flux.f90 | 8 +- src/MNH/two_wayn.f90 | 143 +++---- src/MNH/update_lm.f90 | 12 +- src/MNH/update_metrics.f90 | 35 +- src/MNH/ver_dyn.f90 | 49 ++- src/MNH/ver_int_thermo.f90 | 6 +- src/MNH/ver_interp_to_mixed_grid.f90 | 6 +- src/MNH/ver_prep_mesonh_case.f90 | 15 +- src/MNH/ver_thermo.f90 | 65 ++-- src/MNH/vert_coord.f90 | 43 ++- src/MNH/write_lbn.f90 | 23 +- src/MNH/write_lfifm1_for_diag_supp.f90 | 7 +- src/MNH/write_lfifmn_fordiachron.f90 | 9 +- src/MNH/write_lfin.f90 | 15 +- src/MNH/write_seriesn.f90 | 4 +- src/MNH/write_surf_mnh.f90 | 8 +- src/MNH/zsect.f90 | 6 +- src/MNH/zsmt_pgd.f90 | 35 +- 156 files changed, 2530 insertions(+), 1732 deletions(-) diff --git a/MY_RUN/KTEST/001_2Drelief/001_prep_ideal_case/PRE_IDEA1.nam b/MY_RUN/KTEST/001_2Drelief/001_prep_ideal_case/PRE_IDEA1.nam index 07695c089..dc7ea3553 100644 --- a/MY_RUN/KTEST/001_2Drelief/001_prep_ideal_case/PRE_IDEA1.nam +++ b/MY_RUN/KTEST/001_2Drelief/001_prep_ideal_case/PRE_IDEA1.nam @@ -3,7 +3,9 @@ &NAM_VER_GRID NKMAX=48 ZDZGRD=40., ZDZTOP=500., ZZMAX_STRGRD=5000. , ZSTRGRD=10. , ZSTRTOP= 10. / &NAM_CONF_PRE LCARTESIAN=.TRUE., LBOUSS=.FALSE., NVERB=5, - CIDEAL='RSOU', CZS='BELL',LSHIFT=F / + CIDEAL='RSOU', CZS='BELL',LSHIFT=F + !JPHEXT = 3 , NHALO = 3 + / &NAM_CONFn LUSERV=.TRUE. / &NAM_GRID_PRE XLAT0=43.29 / &NAM_GRIDH_PRE XDELTAX=5.E3, XDELTAY=5.E3, diff --git a/MY_RUN/KTEST/001_2Drelief/002_mesonh/EXSEG1.nam b/MY_RUN/KTEST/001_2Drelief/002_mesonh/EXSEG1.nam index c516f48ec..7bd4ee0c5 100644 --- a/MY_RUN/KTEST/001_2Drelief/002_mesonh/EXSEG1.nam +++ b/MY_RUN/KTEST/001_2Drelief/002_mesonh/EXSEG1.nam @@ -11,7 +11,9 @@ &NAM_TURBn XIMPL = 1., CTURBLEN = "DELT", CTURBDIM = "3DIM", LTURB_DIAG = T, LTURB_FLX = T / &NAM_CONF CCONF = "START", LFLAT = F, NMODEL = 1, NVERB = 5, - CEXP = "EXPER", CSEG = "HYD2D" / + CEXP = "EXPER", CSEG = "HYD2D" + !JPHEXT=3 NHALO=3 + / &NAM_DYN XSEGLEN =1080., XASSELIN = 0.2, LCORIO = F, XALKTOP = 0.005, XALZBOT = 12570., LNUMDIFU =.T. / &NAM_FMOUT XFMOUT(1,1) = 360., XFMOUT(1,2) = 720., XFMOUT(1,3) = 1080. / diff --git a/MY_RUN/KTEST/002_3Drelief/001_prep_ideal_case/PRE_IDEA1.nam b/MY_RUN/KTEST/002_3Drelief/001_prep_ideal_case/PRE_IDEA1.nam index 5bd73e3e1..d11657a5e 100644 --- a/MY_RUN/KTEST/002_3Drelief/001_prep_ideal_case/PRE_IDEA1.nam +++ b/MY_RUN/KTEST/002_3Drelief/001_prep_ideal_case/PRE_IDEA1.nam @@ -8,7 +8,9 @@ CEQNSYS='LHE' CZS='BELL' CIDEAL='CSTN' - NVERB=1 / + NVERB=1 + !JPHEXT = 3 , NHALO = 3 + / &NAM_CONFn LUSERV=.FALSE. LUSERC=.FALSE. LUSERR=.FALSE. LUSERI=.FALSE. LUSERS=.FALSE. LUSERG=.FALSE. LUSERH=.FALSE. / &NAM_GRID_PRE XLAT0=43.29 / diff --git a/MY_RUN/KTEST/002_3Drelief/002_mesonh/EXSEG1.nam b/MY_RUN/KTEST/002_3Drelief/002_mesonh/EXSEG1.nam index 1dde7f08b..289c484be 100644 --- a/MY_RUN/KTEST/002_3Drelief/002_mesonh/EXSEG1.nam +++ b/MY_RUN/KTEST/002_3Drelief/002_mesonh/EXSEG1.nam @@ -12,8 +12,9 @@ &NAM_LBCn CLBCX = 2*"OPEN", CLBCY = 2*"OPEN" / &NAM_CONF CCONF = "START", NMODEL = 1, CSPLIT='BSPLITTING' , - NVERB = 5, CEXP = "REL3D", CSEG = "EXP01" , - / + NVERB = 5, CEXP = "REL3D", CSEG = "EXP01" + !JPHEXT=3 NHALO=3 + / &NAM_DYN XSEGLEN = 1000., XASSELIN = 0.2, LCORIO = F, XALKTOP = 0.005, XALZBOT = 12570., LNUMDIFU =.F. / diff --git a/MY_RUN/KTEST/003_KW78/001_prep_ideal_case/PRE_IDEA1.nam b/MY_RUN/KTEST/003_KW78/001_prep_ideal_case/PRE_IDEA1.nam index 365356318..811e8fa86 100644 --- a/MY_RUN/KTEST/003_KW78/001_prep_ideal_case/PRE_IDEA1.nam +++ b/MY_RUN/KTEST/003_KW78/001_prep_ideal_case/PRE_IDEA1.nam @@ -7,7 +7,9 @@ CIDEAL='RSOU' CZS='FLAT' LBOUSS=.FALSE. LPERTURB=.TRUE. CEQNSYS='LHE',LSHIFT=.TRUE., - NVERB=5 / + NVERB=5 + !JPHEXT = 3 , NHALO = 3 + / &NAM_PERT_PRE CPERT_KIND= 'TH' , XAMPLITH= 1.5 , LSET_RHU= .FALSE. , XAMPLIRV= 0. , XCENTERZ= 1692.31 diff --git a/MY_RUN/KTEST/003_KW78/002_mesonh/EXSEG1.nam b/MY_RUN/KTEST/003_KW78/002_mesonh/EXSEG1.nam index 675c5bed1..286625232 100644 --- a/MY_RUN/KTEST/003_KW78/002_mesonh/EXSEG1.nam +++ b/MY_RUN/KTEST/003_KW78/002_mesonh/EXSEG1.nam @@ -16,7 +16,9 @@ &NAM_CONF CCONF = "START", NMODEL = 1, LFLAT = T, NVERB = 5, CEXP = "KWRAI", CSEG = "SG520" , - CSPLIT='BSPLITTING' / + CSPLIT='BSPLITTING' + !JPHEXT=3 NHALO=3 + / &NAM_DYN XSEGLEN = 1800., XASSELIN = 0.2, LCORIO = F, LNUMDIFU = T / diff --git a/MY_RUN/KTEST/004_Reunion/001_prep_pgd/PRE_PGD1.nam b/MY_RUN/KTEST/004_Reunion/001_prep_pgd/PRE_PGD1.nam index fd71d7780..1316b5cf4 100644 --- a/MY_RUN/KTEST/004_Reunion/001_prep_pgd/PRE_PGD1.nam +++ b/MY_RUN/KTEST/004_Reunion/001_prep_pgd/PRE_PGD1.nam @@ -1,4 +1,7 @@ &NAM_CONFIO LCDF4=T, LLFIOUT=T, LLFIREAD=F / +&NAM_CONF_PGD + !JPHEXT = 3 , NHALO_MNH = 3 +/ &NAM_CONFZ ! NZ_VERB=5 , NB_PROCIO_W=8 / diff --git a/MY_RUN/KTEST/004_Reunion/002_prep_ideal_case/PRE_IDEA1.nam b/MY_RUN/KTEST/004_Reunion/002_prep_ideal_case/PRE_IDEA1.nam index 593246928..fecdb796d 100644 --- a/MY_RUN/KTEST/004_Reunion/002_prep_ideal_case/PRE_IDEA1.nam +++ b/MY_RUN/KTEST/004_Reunion/002_prep_ideal_case/PRE_IDEA1.nam @@ -7,7 +7,9 @@ &NAM_CONF_PRE LCARTESIAN= F LBOUSS= F CEQNSYS='LHE' CIDEAL='CSTN' - NVERB=5 / + NVERB=5 + !JPHEXT = 3 , NHALO = 3 + / &NAM_CONFn LUSERV=T / &NAM_LUNITn CINIFILE = 'REUNION_IDEA_520',CINIFILEPGD = 'REUNION_PGD_1km5_520' / &NAM_DYNn_PRE diff --git a/MY_RUN/KTEST/004_Reunion/003_mesonh/EXSEG1.nam b/MY_RUN/KTEST/004_Reunion/003_mesonh/EXSEG1.nam index 76ae1d3bb..91cd055e3 100644 --- a/MY_RUN/KTEST/004_Reunion/003_mesonh/EXSEG1.nam +++ b/MY_RUN/KTEST/004_Reunion/003_mesonh/EXSEG1.nam @@ -19,7 +19,9 @@ NBJSLICE=1 NJSLICEL(1)=30 NJSLICEH(1)=35 / &NAM_CONF CCONF = "START", NMODEL = 1, NVERB = 5, CEXP = "REUNI", CSEG = "00A20" , - CSPLIT="BSPLITTING" / + CSPLIT="BSPLITTING" + !JPHEXT =3 , NHALO = 3 + / &NAM_DYN XSEGLEN = 40., LCORIO = F, LNUMDIFU = F, XALKTOP = 0.01, XALZBOT = 14000. / diff --git a/MY_RUN/KTEST/007_16janvier/001_pgd1/PRE_PGD1.nam b/MY_RUN/KTEST/007_16janvier/001_pgd1/PRE_PGD1.nam index e13f0056d..1dfcd7809 100644 --- a/MY_RUN/KTEST/007_16janvier/001_pgd1/PRE_PGD1.nam +++ b/MY_RUN/KTEST/007_16janvier/001_pgd1/PRE_PGD1.nam @@ -1,4 +1,7 @@ &NAM_CONFIO LCDF4=T, LLFIOUT=T, LLFIREAD=F / +&NAM_CONF_PGD + !JPHEXT = 3 , NHALO_MNH = 3 + / &NAM_PGDFILE CPGDFILE='16JAN98_36km' / &NAM_CONF_PROJ XLAT0=50., XLON0=-2.8, XRPK=0.58, XBETA=0. / &NAM_CONF_PROJ_GRID XLATCEN=48., XLONCEN=-1., diff --git a/MY_RUN/KTEST/007_16janvier/002_pgd2/PRE_PGD1.nam b/MY_RUN/KTEST/007_16janvier/002_pgd2/PRE_PGD1.nam index cb72d1781..13c2bc41a 100644 --- a/MY_RUN/KTEST/007_16janvier/002_pgd2/PRE_PGD1.nam +++ b/MY_RUN/KTEST/007_16janvier/002_pgd2/PRE_PGD1.nam @@ -1,4 +1,7 @@ &NAM_CONFIO LCDF4=T, LLFIOUT=T, LLFIREAD=F / +&NAM_CONF_PGD + ! JPHEXT = 3 , NHALO_MNH = 3 + / &NAM_PGDFILE CPGDFILE='16JAN98_9km' / &NAM_PGD_GRID YINIFILE='16JAN98_36km' YFILETYPE='MESONH' / &NAM_INIFILE_CONF_PROJ IXOR=10, IYOR=10, IXSIZE=10, IYSIZE=10, IDXRATIO=4, IDYRATIO=4 / diff --git a/MY_RUN/KTEST/007_16janvier/003_nest/PRE_NEST_PGD1.nam b/MY_RUN/KTEST/007_16janvier/003_nest/PRE_NEST_PGD1.nam index 0d51439c1..c19fd5959 100644 --- a/MY_RUN/KTEST/007_16janvier/003_nest/PRE_NEST_PGD1.nam +++ b/MY_RUN/KTEST/007_16janvier/003_nest/PRE_NEST_PGD1.nam @@ -1,4 +1,7 @@ &NAM_CONFIO LCDF4=T, LLFIOUT=T, LLFIREAD=F / +&NAM_CONF_NEST + !JPHEXT =3 , NHALO_MNH = 3 + / &NAM_PGD1 YPGD1 = '16JAN98_36km' / &NAM_PGD2 YPGD2 = '16JAN98_9km', IDAD = 1 / &NAM_NEST_PGD YNEST = 'e1' / diff --git a/MY_RUN/KTEST/007_16janvier/004_arp2lfi/PRE_REAL1.nam b/MY_RUN/KTEST/007_16janvier/004_arp2lfi/PRE_REAL1.nam index bd6b5b907..681314cdd 100644 --- a/MY_RUN/KTEST/007_16janvier/004_arp2lfi/PRE_REAL1.nam +++ b/MY_RUN/KTEST/007_16janvier/004_arp2lfi/PRE_REAL1.nam @@ -2,6 +2,9 @@ &NAM_CONFZ ! NZ_VERB=5 , NZ_PROC=0 , NB_PROCIO_R=1 , NB_PROCIO_W=1 / +&NAM_REAL_CONF NVERB=5 , CPRESOPT='ZRESI' + !JPHEXT=3 , NHALO=3 + / &NAM_FILE_NAMES HATMFILE ='arpifs.AN.19980116.06' , HATMFILETYPE='GRIBEX', HPGDFILE ='16JAN98_36km.neste1' , CINIFILE='16JAN_06_MNH' / &NAM_VER_GRID NKMAX=50, YZGRID_TYPE='FUNCTN', diff --git a/MY_RUN/KTEST/007_16janvier/006_preal/PRE_REAL1.nam b/MY_RUN/KTEST/007_16janvier/006_preal/PRE_REAL1.nam index d48201b85..963196cc0 100644 --- a/MY_RUN/KTEST/007_16janvier/006_preal/PRE_REAL1.nam +++ b/MY_RUN/KTEST/007_16janvier/006_preal/PRE_REAL1.nam @@ -1,7 +1,9 @@ &NAM_CONFIO LCDF4=T, LLFIOUT=T, LLFIREAD=F / &NAM_FILE_NAMES HATMFILE ='16JAN_06_MNH.spa04' , HATMFILETYPE='MESONH', HPGDFILE ='16JAN98_9km.neste1' , CINIFILE='16JAN_06_MNH2' / -&NAM_REAL_CONF NVERB=5 / +&NAM_REAL_CONF NVERB=5 + !JPHEXT=3 , NHALO=3 + / &NAM_VER_GRID NKMAX=50, YZGRID_TYPE='FUNCTN', ZDZGRD=60., ZDZTOP=700., ZZMAX_STRGRD=2500., ZSTRGRD=9., ZSTRTOP=7. / diff --git a/MY_RUN/KTEST/007_16janvier/008_run2/EXSEG1.nam.src b/MY_RUN/KTEST/007_16janvier/008_run2/EXSEG1.nam.src index 04a583eb4..090742784 100644 --- a/MY_RUN/KTEST/007_16janvier/008_run2/EXSEG1.nam.src +++ b/MY_RUN/KTEST/007_16janvier/008_run2/EXSEG1.nam.src @@ -16,9 +16,11 @@ &NAM_LBCn CLBCX = 2*"OPEN", CLBCY = 2*"OPEN" / &NAM_TURBn CTURBLEN = "BL89", CTURBDIM = "1DIM", LSUBG_COND = F / &NAM_CH_MNHCn LUSECHEM = F / -&NAM_CONF CCONF = "START", NVERB=5, NMODEL = 2, +&NAM_CONF CCONF = "START", NVERB=5, NMODEL = 2, CEXP = "16JAN", CSEG = "12B18" , - CSPLIT='BSPLITTING' / + CSPLIT='BSPLITTING' + !NHALO=3 JPHEXT=3 + / &NAM_DYN XSEGLEN = 300., LCORIO = T, LNUMDIFU = T, XALKTOP = 0.001, XALZBOT = 14500. / &NAM_NESTING NDAD(2) = 1, NDTRATIO(2) = 4, XWAY(2) = 2. / diff --git a/MY_RUN/KTEST/012_dust/001_pgd1/PRE_PGD1.nam b/MY_RUN/KTEST/012_dust/001_pgd1/PRE_PGD1.nam index 5e0cdd906..f088430ab 100644 --- a/MY_RUN/KTEST/012_dust/001_pgd1/PRE_PGD1.nam +++ b/MY_RUN/KTEST/012_dust/001_pgd1/PRE_PGD1.nam @@ -1,5 +1,9 @@ &NAM_CONFIO LCDF4=T, LLFIOUT=T, LLFIREAD=F / &NAM_PGDFILE CPGDFILE='pgd_dust_30km' / +&NAM_CONF_PGD + JPHEXT = 3 + NHALO_MNH = 3 +/ &NAM_CONF_PROJ XRPK=1., XBETA=0., diff --git a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000924.00 b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000924.00 index 79d93a7c1..b162feb30 100644 --- a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000924.00 +++ b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000924.00 @@ -5,7 +5,8 @@ &NAM_AERO_CONF LORILAM=.FALSE., LDUST=.TRUE. / &NAM_REAL_CONF NVERB=5, CEQNSYS='DUR', - CPRESOPT='RICHA' / + CPRESOPT='RICHA' + JPHEXT=3 , NHALO=3 / &NAM_VER_GRID NKMAX=30, YZGRID_TYPE='FUNCTN', ZDZGRD=100., diff --git a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000924.12 b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000924.12 index 5699a36f3..0eb65d758 100644 --- a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000924.12 +++ b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000924.12 @@ -5,7 +5,8 @@ &NAM_AERO_CONF LORILAM=.FALSE., LDUST=.TRUE. / &NAM_REAL_CONF NVERB=5, CEQNSYS='DUR', - CPRESOPT='RICHA' / + CPRESOPT='RICHA' + JPHEXT=3 , NHALO=3 / &NAM_VER_GRID NKMAX=30, YZGRID_TYPE='FUNCTN', ZDZGRD=100., diff --git a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000925.00 b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000925.00 index 2ba0e7852..2cb7fb434 100644 --- a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000925.00 +++ b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/PRE_REAL1.nam.20000925.00 @@ -5,7 +5,8 @@ &NAM_AERO_CONF LORILAM=.FALSE., LDUST=.TRUE. / &NAM_REAL_CONF NVERB=5, CEQNSYS='DUR', - CPRESOPT='RICHA' / + CPRESOPT='RICHA' + JPHEXT=3 , NHALO=3 / &NAM_VER_GRID NKMAX=30, YZGRID_TYPE='FUNCTN', ZDZGRD=100., diff --git a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/run_ecmwf2lfi_xyz b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/run_ecmwf2lfi_xyz index 9ce39fcc7..d3251c34a 100755 --- a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/run_ecmwf2lfi_xyz +++ b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/run_ecmwf2lfi_xyz @@ -23,6 +23,8 @@ cp PRE_REAL1.nam.20000924.00 PRE_REAL1.nam time ${MONORUN} PREP_REAL_CASE${XYZ} mv OUTPUT_LISTING0 OUTPUT_LISTING0_2400 +#exit + cp PRE_REAL1.nam.20000924.12 PRE_REAL1.nam time ${MONORUN} PREP_REAL_CASE${XYZ} mv OUTPUT_LISTING0 OUTPUT_LISTING0_2412 diff --git a/MY_RUN/KTEST/012_dust/003_run/EXSEG1.nam b/MY_RUN/KTEST/012_dust/003_run/EXSEG1.nam index 9d2b6ca5e..f8363807c 100644 --- a/MY_RUN/KTEST/012_dust/003_run/EXSEG1.nam +++ b/MY_RUN/KTEST/012_dust/003_run/EXSEG1.nam @@ -1,8 +1,9 @@ &NAM_CONFIO LCDF4=T, LLFIOUT=T, LLFIREAD=F / &NAM_LUNITn CINIFILE = "S7020000924.00", - CINIFILEPGD = "pgd_dust_30km", - CCPLFILE(1) = "S7020000924.12" / + CINIFILEPGD = "pgd_dust_30km" + CCPLFILE(1) = "S7020000924.12" + / &NAM_DYNn XTSTEP = 40., CPRESOPT = "CRESI", @@ -53,7 +54,8 @@ NMODEL = 1, NVERB = 5, CEXP = "DUST7", - CSEG = "SEG01" / + CSEG = "SEG01" + JPHEXT=3 , NHALO=3 / &NAM_DYN XSEGLEN = 43200, XASSELIN = 0.2, diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90 index 5ef3a5715..dcac5390d 100644 --- a/src/LIB/SURCOUCHE/src/fmread_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90 @@ -24,6 +24,7 @@ MODULE MODE_FMREAD ! J.Escobar : 22/08/2005 : BUG : manque un "GOTO 1000" si champs ! lue non trouvé !!! ! J.Escobar : 13/01/2015 : remove comment on BCAST(IRESP in FMREADX2_ll +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 ! USE MODD_MPIF #if defined(MNH_IOCDF4) @@ -1858,8 +1859,8 @@ IF (ASSOCIATED(TZFD)) THEN CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(Z3D),Z3D,TZFMH,IRESP) END IF END IF - PLB(1:KRIM+1,:,:) = Z3D(1:KRIM+1,:,:) - PLB(KRIM+2:2*(KRIM+1),:,:) = Z3D(KL3D-KRIM:KL3D,:,:) + PLB(1:KRIM+JPHEXT,:,:) = Z3D(1:KRIM+JPHEXT,:,:) + PLB(KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:,:) = Z3D(KL3D-KRIM-JPHEXT+1:KL3D,:,:) ELSE !(HLBTYPE == 'LBY' .OR. HLBTYPE == 'LBYV') ALLOCATE(Z3D(SIZE(PLB,1),KL3D,SIZE(PLB,3))) Z3D = 0.0 @@ -1895,7 +1896,7 @@ IF (ASSOCIATED(TZFD)) THEN END IF END IF ! erase gap in LB field - Z3D(KRIM+2:2*(KRIM+1),:,:) = Z3D(KL3D-KRIM:KL3D,:,:) + Z3D(KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:,:) = Z3D(KL3D-KRIM-JPHEXT+1:KL3D,:,:) ELSE !(HLBTYPE == 'LBY' .OR. HLBTYPE == 'LBYV') ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,KL3D,SIZE(PLB,3))) Z3D = 0.0 @@ -1905,7 +1906,7 @@ IF (ASSOCIATED(TZFD)) THEN CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(Z3D),Z3D,TZFMH,IRESP) END IF ! erase gap in LB field - Z3D(:,KRIM+2:2*(KRIM+1),:) = Z3D(:,KL3D-KRIM:KL3D,:) + Z3D(:,KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:) = Z3D(:,KL3D-KRIM-JPHEXT+1:KL3D,:) END IF CALL SECOND_MNH2(T1) TIMEZ%T_READLB_READ=TIMEZ%T_READLB_READ + T1 - T0 diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 66ef11665..219632afa 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -10,6 +10,8 @@ ! $Revision$ ! $Date$ !----------------------------------------------------------------- +!Correction : +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !----------------------------------------------------------------- #ifdef MNH_MPI_DOUBLE_PRECISION @@ -2544,7 +2546,7 @@ CONTAINS IRESP = 0 YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' !print * , ' Writing Article LB ' , HRECFM - IF (KL3D /= 2*(KRIM+1)) THEN + IF (KL3D /= 2*(KRIM+JPHEXT)) THEN IRESP = -30 GOTO 1000 END IF @@ -2557,7 +2559,7 @@ CONTAINS TZFMH%COMLEN=KLENCH TZFMH%COMMENT=HCOMMENT IF (LPACK .AND. L2D) THEN - TX3DP=>PLB(:,2:2,:) + TX3DP=>PLB(:,JPHEXT+1:JPHEXT+1,:) #ifdef MNH_NCWRIT IF ( DEF_NC .AND. LLFIFM ) THEN CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(TX3DP),TX3DP,TZFMH,IRESP) @@ -2581,9 +2583,9 @@ CONTAINS ! I/O proc case CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) IF (HLBTYPE == 'LBX' .OR. HLBTYPE == 'LBXU') THEN - ALLOCATE(Z3D((KRIM+1)*2,IJMAX_ll+2*JPHEXT,SIZE(PLB,3))) + ALLOCATE(Z3D((KRIM+JPHEXT)*2,IJMAX_ll+2*JPHEXT,SIZE(PLB,3))) ELSE ! HLBTYPE == 'LBY' .OR. HLBTYPE == 'LBYV' - ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,(KRIM+1)*2,SIZE(PLB,3))) + ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,(KRIM+JPHEXT)*2,SIZE(PLB,3))) END IF DO JI = 1,ISNPROC CALL GET_DISTRIB_LB(HLBTYPE,JI,'FM','WRITE',KRIM,IIB,IIE,IJB,IJE) diff --git a/src/LIB/SURCOUCHE/src/mode_distriblb.f90 b/src/LIB/SURCOUCHE/src/mode_distriblb.f90 index 8509ab6b6..e3d13ec6f 100644 --- a/src/LIB/SURCOUCHE/src/mode_distriblb.f90 +++ b/src/LIB/SURCOUCHE/src/mode_distriblb.f90 @@ -10,6 +10,8 @@ ! $Revision$ ! $Date$ !----------------------------------------------------------------- +!Correction : +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !----------------------------------------------------------------- ! ############################# @@ -171,20 +173,20 @@ IF (KRIMX /=0) THEN IF (OLU) THEN ! full LB zone for u grid point : 2:NRIMX+2,1:NJMAX_ll+ 2 * JPHEXT IXOR=2 - IXEND=KRIMX+2 + IXEND=KRIMX+JPHEXT+1 ! +2 IYOR=1 IYEND=IJMAX_ll+ 2 * JPHEXT ELSE ! full LB zone, mass point : 1:NRIMX+1,1:NJMAX_ll+ 2 * JPHEXT IXOR=1 - IXEND=KRIMX+1 + IXEND=KRIMX+JPHEXT ! +1 IYOR=1 IYEND=IJMAX_ll+ 2 * JPHEXT ENDIF ELSE ! 1 point LB zone : 1:1,1:NJMAX_ll+ 2 * JPHEXT IXOR=1 - IXEND=1 + IXEND=JPHEXT ! 1 IYOR=1 IYEND=IJMAX_ll+ 2 * JPHEXT ENDIF @@ -228,14 +230,14 @@ END IF ! IF (KRIMX /=0) THEN ! full LB zone : NIMAX_ll+JPHEXT-NRIMX +1:NIMAX_ll+ 2 *JPHEXT,1:NJMAX_ll+2 *JPHEXT - IXOR =IIMAX_ll+ 2 * JPHEXT - KRIMX + IXOR =IIMAX_ll+ 2 * JPHEXT - KRIMX-JPHEXT +1 ! -KRIMX IXEND=IIMAX_ll+ 2 * JPHEXT IYOR=1 IYEND=IJMAX_ll+ 2 * JPHEXT ELSE ! 1 point LB zone : NIMAX_ll+ 2 * JPHEXT:NIMAX_ll+ 2 *JPHEXT,1:NJMAX_ll+2 *JPHEXT - IXOR=IIMAX_ll + 2 * JPHEXT - IXEND=IIMAX_ll + 2 * JPHEXT + IXOR=IIMAX_ll + 2 * JPHEXT -JPHEXT +1 ! + 2 * JPHEXT + IXEND=IIMAX_ll + 2 * JPHEXT -JPHEXT +JPHEXT ! + 2 * JPHEXT IYOR=1 IYEND=IJMAX_ll+ 2 * JPHEXT ENDIF @@ -251,7 +253,7 @@ IF (IINFO /=1) THEN IXOR3DX = TZSPLIT%NXORE IYOR3DX = TZSPLIT%NYORE ! - IL3DX = 2*(KRIMX+1) + IL3DX = 2*(KRIMX+JPHEXT) ! +1 IF (KIB == 0) KIB = IL3DX - (IIMAX_ll+2*JPHEXT - IXORI - IXOR3DX +1) KIE=IL3DX - (IIMAX_ll + 2 *JPHEXT - IXENDI- IXOR3DX +1) @@ -378,20 +380,20 @@ IF (KRIMY /=0) THEN IXOR=1 IXEND=IIMAX_ll+ 2 * JPHEXT IYOR=2 - IYEND=KRIMY+2 + IYEND=KRIMY+JPHEXT+1 !+2 ELSE ! full LB zone, mass point : 1:NIMAX_ll+ 2 * JPHEXT,1:NRIMY+1 IXOR=1 IXEND=IIMAX_ll+ 2 * JPHEXT IYOR=1 - IYEND=KRIMY+1 + IYEND=KRIMY+JPHEXT !+1 ENDIF ELSE ! 1 point LB zone : 1:NIMAX_ll+ 2 * JPHEXT,1:1 IXOR=1 IXEND=IIMAX_ll+ 2 * JPHEXT IYOR=1 - IYEND=1 + IYEND=JPHEXT !1 ENDIF CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,YMODE,IINFO,KIP) IF (IINFO /= 1) THEN ! no empty intersection @@ -430,14 +432,14 @@ IF (KRIMY /=0) THEN ! full LB zone :1:NIMAX_ll+2 *JPHEXT, NJMAX_ll+JPHEXT-NRIMY +1:NJMAX_ll+ 2 *JPHEXT, IXOR =1 IXEND=IIMAX_ll+ 2 * JPHEXT - IYOR = IJMAX_ll+ 2 * JPHEXT - KRIMY + IYOR = IJMAX_ll+ 2 * JPHEXT -KRIMY-JPHEXT +1 ! - KRIMY IYEND=IJMAX_ll+ 2 * JPHEXT ELSE ! 1 point LB zone : 1:NJMAX_ll+2 *JPHEXT,NJMAX_ll+ 2 * JPHEXT:NJMAX_ll+ 2 *JPHEXT IXOR=1 IXEND=IIMAX_ll+ 2 * JPHEXT - IYOR=IJMAX_ll + 2 * JPHEXT - IYEND=IJMAX_ll + 2 * JPHEXT + IYOR=IJMAX_ll + 2 * JPHEXT - JPHEXT + 1 ! + 2 * JPHEXT + IYEND=IJMAX_ll + 2 * JPHEXT - JPHEXT + JPHEXT ! + 2 * JPHEXT ENDIF CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,YMODE,IINFO,KIP) IF (IINFO /=1) THEN @@ -451,7 +453,7 @@ IF (IINFO /=1) THEN IXOR3DY = TZSPLIT%NXORE IYOR3DY = TZSPLIT%NYORE ! - IL3DY = 2*(KRIMY+1) + IL3DY = 2*(KRIMY+JPHEXT ) ! +1 KIB=IXORI + IXOR3DY -1 KIE=IXENDI + IXOR3DY -1 IF (KJB == 0) KJB = IL3DY - (IJMAX_ll + 2 *JPHEXT - IYORI - IYOR3DY +1) diff --git a/src/LIB/SURCOUCHE/src/mode_double_double.f90 b/src/LIB/SURCOUCHE/src/mode_double_double.f90 index 34dd51dd9..8512fb623 100644 --- a/src/LIB/SURCOUCHE/src/mode_double_double.f90 +++ b/src/LIB/SURCOUCHE/src/mode_double_double.f90 @@ -2,6 +2,10 @@ !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- +!Correction : +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!----------------------------------------------------------------- MODULE modd_repro_sum TYPE DOUBLE_DOUBLE SEQUENCE @@ -177,56 +181,56 @@ CONTAINS ddb%R = 0.0 ddb%E = 0.0 - ddc(1:nx)%R = dda(1:nx)%R - ddc(1:nx)%E = dda(1:nx)%E - ! - ! copie directly the contribution corresponding - ! to ddd(i) = dda(i) + 0 when not a power of 2 size - ! - ipas = 2**(lnxb2-1) - ipasm = nx - ipas - ddd(ipasm+1:ipas)%R = dda(ipasm+1:ipas)%R - ddd(ipasm+1:ipas)%E = dda(ipasm+1:ipas)%E - DO j=lnxb2-1,0,-1 - ! - ! test for nx not power of 2 - ! - ipas = 2**j - ipasm = min(ipas,nx-ipas) - - DO i = 1, ipasm - ! - ! Compute dda + ddb using Knuth's trick. - ! - t1(i) = ddc(i)%R + ddc(i+ipas)%R - e(i) = t1(i) - ddc(i)%R - t2(i) = ((ddc(i+ipas)%R - e(i)) + (ddc(i)%R - (t1(i) - e(i)))) & - + ddc(i)%E + ddc(i+ipas)%E - ! - ! The result is t1 + t2, after normalization. - ! - ddd(i)%R = t1(i) + t2(i) - ddd(i)%E = t2(i) - ((t1(i) + t2(i)) - t1(i)) - ENDDO - ddc(1:ipas)%R = ddd(1:ipas)%R - ddc(1:ipas)%E = ddd(1:ipas)%E - END DO - ddb = ddc(1) +!!$ ddc(1:nx)%R = dda(1:nx)%R +!!$ ddc(1:nx)%E = dda(1:nx)%E +!!$ ! +!!$ ! copie directly the contribution corresponding +!!$ ! to ddd(i) = dda(i) + 0 when not a power of 2 size +!!$ ! +!!$ ipas = 2**(lnxb2-1) +!!$ ipasm = nx - ipas +!!$ ddd(ipasm+1:ipas)%R = dda(ipasm+1:ipas)%R +!!$ ddd(ipasm+1:ipas)%E = dda(ipasm+1:ipas)%E +!!$ DO j=lnxb2-1,0,-1 +!!$ ! +!!$ ! test for nx not power of 2 +!!$ ! +!!$ ipas = 2**j +!!$ ipasm = min(ipas,nx-ipas) +!!$ +!!$ DO i = 1, ipasm +!!$ ! +!!$ ! Compute dda + ddb using Knuth's trick. +!!$ ! +!!$ t1(i) = ddc(i)%R + ddc(i+ipas)%R +!!$ e(i) = t1(i) - ddc(i)%R +!!$ t2(i) = ((ddc(i+ipas)%R - e(i)) + (ddc(i)%R - (t1(i) - e(i)))) & +!!$ + ddc(i)%E + ddc(i+ipas)%E +!!$ ! +!!$ ! The result is t1 + t2, after normalization. +!!$ ! +!!$ ddd(i)%R = t1(i) + t2(i) +!!$ ddd(i)%E = t2(i) - ((t1(i) + t2(i)) - t1(i)) +!!$ ENDDO +!!$ ddc(1:ipas)%R = ddd(1:ipas)%R +!!$ ddc(1:ipas)%E = ddd(1:ipas)%E +!!$ END DO +!!$ ddb = ddc(1) -!!$ DO i = 1, SIZE(dda,1) -!!$ ! -!!$ ! Compute dda + ddb using Knuth's trick. -!!$ ! -!!$ t1(i) = dda(i)%R + ddb%R -!!$ e(i) = t1(i) - dda(i)%R -!!$ t2(i) = ((ddb%R - e(i)) + (dda(i)%R - (t1(i) - e(i)))) & -!!$ + dda(i)%E + ddb%E -!!$ ! -!!$ ! The result is t1 + t2, after normalization. -!!$ ! -!!$ ddb%R = t1(i) + t2(i) -!!$ ddb%E = t2(i) - ((t1(i) + t2(i)) - t1(i)) -!!$ ENDDO + DO i = 1, SIZE(dda,1) + ! + ! Compute dda + ddb using Knuth's trick. + ! + t1(i) = dda(i)%R + ddb%R + e(i) = t1(i) - dda(i)%R + t2(i) = ((ddb%R - e(i)) + (dda(i)%R - (t1(i) - e(i)))) & + + dda(i)%E + ddb%E + ! + ! The result is t1 + t2, after normalization. + ! + ddb%R = t1(i) + t2(i) + ddb%E = t2(i) - ((t1(i) + t2(i)) - t1(i)) + ENDDO END FUNCTION SUM_DD_DD1 diff --git a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 index bae778a2d..4f7309ae3 100644 --- a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 @@ -10,6 +10,8 @@ ! $Revision$ ! $Date$ !----------------------------------------------------------------- +!Correction : +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !----------------------------------------------------------------- ! ######################## @@ -214,6 +216,9 @@ INTEGER :: KINFO ! return status ! TYPE(LIST_ll), POINTER :: TZFIELD +! + INTEGER :: ICOUNT + CHARACTER*2 :: YCOUNT ! !------------------------------------------------------------------------------- ! @@ -235,11 +240,14 @@ ! IF (MPPDB_INITIALIZED) THEN TZFIELD => TPLIST + ICOUNT=0 DO WHILE (ASSOCIATED(TZFIELD)) + ICOUNT=ICOUNT+1 + WRITE(YCOUNT,'(I2)') ICOUNT IF (TZFIELD%L2D) THEN - CALL MPPDB_CHECK2D(TZFIELD%ARRAY2D,"UPDATE_HALO2_ll",PRECISION) + CALL MPPDB_CHECK2D(TZFIELD%ARRAY2D,"UPDATE_HALO2_ll::TAB2D("//YCOUNT//")",PRECISION) ELSEIF(TZFIELD%L3D) THEN - CALL MPPDB_CHECK3D(TZFIELD%ARRAY3D,"UPDATE_HALO2_ll",PRECISION) + CALL MPPDB_CHECK3D(TZFIELD%ARRAY3D,"UPDATE_HALO2_ll::TAB2D("//YCOUNT//")",PRECISION) END IF TZFIELD => TZFIELD%NEXT END DO diff --git a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 index 67d1be646..7597fca05 100644 --- a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 @@ -10,6 +10,8 @@ ! $Revision$ ! $Date$ !----------------------------------------------------------------- +!Correction : +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !----------------------------------------------------------------- ! ######################## @@ -159,6 +161,9 @@ ! !* 0.2 declarations of local variables TYPE(LIST_ll), POINTER :: TZFIELD +! + INTEGER :: ICOUNT + CHARACTER*2 :: YCOUNT ! !------------------------------------------------------------------------------- ! @@ -178,11 +183,14 @@ ! IF (MPPDB_INITIALIZED) THEN TZFIELD => TPLIST + ICOUNT=0 DO WHILE (ASSOCIATED(TZFIELD)) + ICOUNT=ICOUNT+1 + WRITE(YCOUNT,'(I2)') ICOUNT IF (TZFIELD%L2D) THEN - CALL MPPDB_CHECK2D(TZFIELD%ARRAY2D,"UPDATE_HALO_ll",PRECISION) + CALL MPPDB_CHECK2D(TZFIELD%ARRAY2D,"UPDATE_HALO_ll::TAB2D("//YCOUNT//")",PRECISION) ELSEIF(TZFIELD%L3D) THEN - CALL MPPDB_CHECK3D(TZFIELD%ARRAY3D,"UPDATE_HALO_ll",PRECISION) + CALL MPPDB_CHECK3D(TZFIELD%ARRAY3D,"UPDATE_HALO_ll::TAB3D("//YCOUNT//")",PRECISION) END IF TZFIELD => TZFIELD%NEXT END DO diff --git a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 b/src/LIB/SURCOUCHE/src/mode_mppdb.f90 index 43d576747..1d3ed8211 100644 --- a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 +++ b/src/LIB/SURCOUCHE/src/mode_mppdb.f90 @@ -6,6 +6,7 @@ MODULE MODE_MPPDB ! ! Modifs : !! J.Escobar 23/10/2012: correct CHECK_LB & format print output +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 ! IMPLICIT NONE @@ -254,13 +255,14 @@ CONTAINS SUBROUTINE MPPDB_CHECK3D(PTAB,MESSAGE,PRECISION) - USE MODD_PARAMETERS, ONLY : JPHEXT + USE MODD_PARAMETERS_ll, ONLY : JPHEXT USE MODI_GATHER_ll USE MODD_VAR_ll , ONLY : MPI_PRECISION - + USE MODD_MPIF , ONLY : MPI_INTEGER, MPI_STATUS_IGNORE IMPLICIT NONE + REAL, DIMENSION(:,:,:) :: PTAB CHARACTER(len=*) :: MESSAGE REAL :: PRECISION @@ -273,15 +275,19 @@ CONTAINS INTEGER :: IIU,IJU,IIU_ll,IJU_ll,IKU_ll INTEGER :: IINFO_ll - INTEGER,PARAMETER :: ITAG = 12345 + INTEGER,PARAMETER :: ITAG1 = 12345 , ITAG2 = 123456 - INTEGER :: I_FIRST_SON, IRECVSTATUS + INTEGER :: I_FIRST_SON INTEGER :: I_FIRST_FATHER REAL :: MAX_DIFF , MAX_VAL INTEGER :: IIB_ll,IIE_ll,IJB_ll,IJE_ll REAL,POINTER, DIMENSION(:,:,:) :: TAB_INTERIOR_ll ! for easy debug + INTEGER :: IIU_SON_ll,IJU_SON_ll,IKU_SON_ll + INTEGER :: IIB_SON_ll,IIE_SON_ll,IJB_SON_ll,IJE_SON_ll + INTEGER :: IHEXT_SON_ll , IDIFF_HEXT + #ifdef MNH_SP4 !pas de mpi_spawn sur IBM-SP ni MPI_ARGV_NULL etc ... RETURN @@ -306,29 +312,51 @@ CONTAINS ! ! I'm the first FATHER => recieve the correct globale ARRAY from first son ! - ALLOCATE(TAB_SON_ll(IIU_ll,IJU_ll,IKU_ll)) ! ! the first son , is the next processus after this 'world' so ! - I_FIRST_SON = MPPDB_NBPROC_WORLD + I_FIRST_SON = MPPDB_NBPROC_WORLD + ! + ! recieve JPHEXT from son if different + ! + CALL MPI_RECV(IHEXT_SON_ll,1,MPI_INTEGER,I_FIRST_SON, & + ITAG1, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll) + + !IHEXT_SON_ll = JPHEXT + + IIU_SON_ll = IIMAX_ll+2*IHEXT_SON_ll + IJU_SON_ll = IJMAX_ll+2*IHEXT_SON_ll + IKU_SON_ll = SIZE(PTAB,3) + + ALLOCATE(TAB_SON_ll(IIU_SON_ll,IJU_SON_ll,IKU_SON_ll)) ! CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, & - ITAG, MPPDB_INTRA_COMM, IRECVSTATUS, IINFO_ll) + ITAG2, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll) ! - TAB_SAVE_ll = TAB_ll - TAB_ll = ABS ( TAB_ll - TAB_SON_ll ) + ! + IF (MPPDB_CHECK_LB) THEN - IIB_ll = 1 ; IJB_ll = 1 - IIE_ll = IIU_ll ; IJE_ll = IJU_ll + IDIFF_HEXT = MIN(JPHEXT,IHEXT_SON_ll) ELSE - IIB_ll = 1 + JPHEXT ; IJB_ll = 1 + JPHEXT - IIE_ll = IIU_ll-JPHEXT ; IJE_ll = IJU_ll-JPHEXT - END IF + IDIFF_HEXT = 0 + ENDIF + IIB_ll = 1 + JPHEXT ; IJB_ll = 1 + JPHEXT + IIE_ll = IIU_ll-JPHEXT ; IJE_ll = IJU_ll-JPHEXT + + IIB_SON_ll = 1 + IHEXT_SON_ll ; IJB_SON_ll = 1 + IHEXT_SON_ll + IIE_SON_ll = IIU_SON_ll-IHEXT_SON_ll ; IJE_SON_ll = IJU_SON_ll-IHEXT_SON_ll + ! + TAB_SAVE_ll = TAB_ll + TAB_ll = 0.0 + TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT,1:IKU_ll) & + = ABS ( TAB_SAVE_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT,1:IKU_ll) & + - TAB_SON_ll(IIB_SON_ll-IDIFF_HEXT:IIE_SON_ll+IDIFF_HEXT,IIB_SON_ll-IDIFF_HEXT:IJE_SON_ll+IDIFF_HEXT,1:IKU_SON_ll) ) + MAX_VAL = MAXVAL( ABS (TAB_SON_ll) ) IF ( MAX_VAL .EQ. 0.0 ) MAX_VAL = 1.0 - MAX_DIFF = MAXVAL( TAB_ll(IIB_ll:IIE_ll,IIB_ll:IJE_ll,1:IKU_ll) / MAX_VAL) - TAB_INTERIOR_ll => TAB_ll(IIB_ll:IIE_ll,IIB_ll:IJE_ll,1:IKU_ll) + MAX_DIFF = MAXVAL( TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT,1:IKU_ll) / MAX_VAL) + TAB_INTERIOR_ll => TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT,1:IKU_ll) ! IF (MAX_DIFF > PRECISION ) THEN write(6, '(" MPPDB_CHECK3D :: PB MPPDB_CHECK3D =",A40," ERROR=",e15.8," MAXVAL=",e15.8)' ) MESSAGE,MAX_DIFF , MAX_VAL @@ -358,10 +386,13 @@ CONTAINS ! first son --> send the good array to the first father ! I_FIRST_FATHER = 0 + IHEXT_SON_ll = JPHEXT + CALL MPI_BSEND(IHEXT_SON_ll,1,MPI_INTEGER,I_FIRST_FATHER, & + ITAG1, MPPDB_INTRA_COMM, IINFO_ll) + CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MPI_PRECISION,I_FIRST_FATHER, & - ITAG, MPPDB_INTRA_COMM, IINFO_ll) - !CALL MPI_BSEND(PTAB,SIZE(PTAB),MPI_PRECISION,I_FIRST_FATHER, & - ! ITAG, MPPDB_INTRA_COMM, IINFO_ll) + ITAG2, MPPDB_INTRA_COMM, IINFO_ll) + END IF END IF @@ -377,7 +408,7 @@ CONTAINS ,PTAB11,PTAB12,PTAB13,PTAB14,PTAB15,PTAB16,PTAB17,PTAB18,PTAB19,PTAB20 & ) - USE MODD_PARAMETERS, ONLY : JPHEXT + USE MODD_PARAMETERS_ll, ONLY : JPHEXT USE MODI_GATHER_ll USE MODD_VAR_ll , ONLY : MPI_PRECISION @@ -416,10 +447,10 @@ CONTAINS SUBROUTINE MPPDB_CHECK2D(PTAB,MESSAGE,PRECISION) - USE MODD_PARAMETERS, ONLY : JPHEXT + USE MODD_PARAMETERS_ll, ONLY : JPHEXT USE MODI_GATHER_ll USE MODD_VAR_ll , ONLY : MPI_PRECISION - + USE MODD_MPIF , ONLY : MPI_INTEGER, MPI_STATUS_IGNORE IMPLICIT NONE @@ -430,20 +461,24 @@ CONTAINS ! ! local var ! - REAL,ALLOCATABLE,TARGET, DIMENSION(:,:) :: TAB_ll,TAB_SON_ll + REAL,ALLOCATABLE,TARGET, DIMENSION(:,:) :: TAB_ll,TAB_SON_ll,TAB_SAVE_ll INTEGER :: IIMAX_ll,IJMAX_ll INTEGER :: IIU,IJU,IIU_ll,IJU_ll INTEGER :: IINFO_ll INTEGER,PARAMETER :: ITAG = 12345 - INTEGER :: I_FIRST_SON, IRECVSTATUS + INTEGER :: I_FIRST_SON INTEGER :: I_FIRST_FATHER REAL :: MAX_DIFF , MAX_VAL INTEGER :: IIB_ll,IIE_ll,IJB_ll,IJE_ll REAL,POINTER, DIMENSION(:,:) :: TAB_INTERIOR_ll ! for easy debug + INTEGER :: IIU_SON_ll,IJU_SON_ll + INTEGER :: IIB_SON_ll,IIE_SON_ll,IJB_SON_ll,IJE_SON_ll + INTEGER :: IHEXT_SON_ll , IDIFF_HEXT + #ifdef MNH_SP4 !pas de mpi_spawn sur IBM-SP ni MPI_ARGV_NULL etc ... RETURN @@ -460,34 +495,55 @@ CONTAINS IIU_ll = IIMAX_ll+2*JPHEXT IJU_ll = IJMAX_ll+2*JPHEXT ALLOCATE(TAB_ll(IIU_ll,IJU_ll)) + ALLOCATE(TAB_SAVE_ll(IIU_ll,IJU_ll)) CALL GATHERALL_FIELD_ll('XY',PTAB,TAB_ll,IINFO_ll) IF (MPPDB_IRANK_WORLD.EQ.0) THEN ! ! I'm the first FATHER => recieve the correct globale ARRAY from first son ! - ALLOCATE(TAB_SON_ll(IIU_ll,IJU_ll)) ! ! the first son , is the next processus after this 'world' so ! I_FIRST_SON = MPPDB_NBPROC_WORLD ! - CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, & - ITAG, MPPDB_INTRA_COMM, IRECVSTATUS, IINFO_ll) + ! recieve JPHEXT from son if different ! - TAB_ll = ABS(TAB_ll - TAB_SON_ll) + CALL MPI_RECV(IHEXT_SON_ll,1,MPI_INTEGER,I_FIRST_SON, & + ITAG, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll) + + IIU_SON_ll = IIMAX_ll+2*IHEXT_SON_ll + IJU_SON_ll = IJMAX_ll+2*IHEXT_SON_ll + + ALLOCATE(TAB_SON_ll(IIU_SON_ll,IJU_SON_ll)) + + ! + CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, & + ITAG, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll) ! + IF (MPPDB_CHECK_LB) THEN - IIB_ll = 1 ; IJB_ll = 1 - IIE_ll = IIU_ll ; IJE_ll = IJU_ll + IDIFF_HEXT = MIN(JPHEXT,IHEXT_SON_ll) ELSE - IIB_ll = 1 + JPHEXT ; IJB_ll = 1 + JPHEXT - IIE_ll = IIU_ll-JPHEXT ; IJE_ll = IJU_ll-JPHEXT - END IF + IDIFF_HEXT = 0 + ENDIF + + IIB_ll = 1 + JPHEXT ; IJB_ll = 1 + JPHEXT + IIE_ll = IIU_ll-JPHEXT ; IJE_ll = IJU_ll-JPHEXT + IIB_SON_ll = 1 + IHEXT_SON_ll ; IJB_SON_ll = 1 + IHEXT_SON_ll + IIE_SON_ll = IIU_SON_ll-IHEXT_SON_ll ; IJE_SON_ll = IJU_SON_ll-IHEXT_SON_ll + + ! + TAB_SAVE_ll = TAB_ll + TAB_ll = 0.0 + TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT) & + = ABS ( TAB_SAVE_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT) & + - TAB_SON_ll(IIB_SON_ll-IDIFF_HEXT:IIE_SON_ll+IDIFF_HEXT,IIB_SON_ll-IDIFF_HEXT:IJE_SON_ll+IDIFF_HEXT) ) + MAX_VAL = MAXVAL( ABS (TAB_SON_ll) ) IF ( MAX_VAL .EQ. 0.0 ) MAX_VAL = 1.0 - MAX_DIFF = MAXVAL( TAB_ll(IIB_ll:IIE_ll,IIB_ll:IJE_ll) / MAX_VAL ) - TAB_INTERIOR_ll => TAB_ll(IIB_ll:IIE_ll,IIB_ll:IJE_ll) + MAX_DIFF = MAXVAL( TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT) / MAX_VAL ) + TAB_INTERIOR_ll => TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT) IF (MAX_DIFF > PRECISION ) THEN write(6, '(" MPPDB_CHECK2D :: PB MPPDB_CHECK2D =",A40," ERROR=",e15.8," MAXVAL=",e15.8)' ) MESSAGE,MAX_DIFF , MAX_VAL ELSE @@ -516,10 +572,11 @@ CONTAINS ! first son --> send the good array to the first father ! I_FIRST_FATHER = 0 + CALL MPI_BSEND(JPHEXT,1,MPI_INTEGER,I_FIRST_FATHER, & + ITAG, MPPDB_INTRA_COMM, IINFO_ll) CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MPI_PRECISION,I_FIRST_FATHER, & ITAG, MPPDB_INTRA_COMM, IINFO_ll) - !CALL MPI_BSEND(PTAB,SIZE(PTAB),MPI_PRECISION,I_FIRST_FATHER, & - ! ITAG, MPPDB_INTRA_COMM, IINFO_ll) + END IF END IF @@ -534,11 +591,11 @@ CONTAINS SUBROUTINE MPPDB_CHECKLB(PLB,MESSAGE,PRECISION,HLBTYPE,KRIM) - USE MODD_PARAMETERS, ONLY : JPHEXT + USE MODD_PARAMETERS_ll, ONLY : JPHEXT USE MODI_GATHER_ll USE MODD_VAR_ll , ONLY : MPI_PRECISION , NMNH_COMM_WORLD USE MODD_IO_ll, ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D - USE MODD_MPIF + USE MODD_MPIF , ONLY : MPI_INTEGER, MPI_STATUS_IGNORE USE MODE_DISTRIB_LB USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll @@ -562,13 +619,12 @@ CONTAINS INTEGER,PARAMETER :: ITAG = 12345 - INTEGER :: I_FIRST_SON, IRECVSTATUS + INTEGER :: I_FIRST_SON INTEGER :: I_FIRST_FATHER REAL :: MAX_DIFF , MAX_VAL INTEGER :: IIB_ll,IIE_ll,IJB_ll,IJE_ll INTEGER :: JI INTEGER :: IIB,IIE,IJB,IJE - INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS #ifdef MNH_SP4 !pas de mpi_spawn sur IBM-SP ni MPI_ARGV_NULL etc ... @@ -600,7 +656,8 @@ CONTAINS IF (IIB /= 0) THEN TX3DP=>Z3D(IIB:IIE,IJB:IJE,:) IF (ISP /= JI) THEN - CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_PRECISION,JI-1,99,NMNH_COMM_WORLD,STATUS,IINFO_ll) + CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_PRECISION,JI-1 & + ,99,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll) ELSE CALL GET_DISTRIB_LB(HLBTYPE,JI,'LOC','WRITE',KRIM,IIB,IIE,IJB,IJE) TX3DP = PLB(IIB:IIE,IJB:IJE,:) @@ -631,7 +688,7 @@ CONTAINS I_FIRST_SON = MPPDB_NBPROC_WORLD ! CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, & - ITAG, MPPDB_INTRA_COMM, IRECVSTATUS, IINFO_ll) + ITAG, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll) ! ALLOCATE(TAB_SAVE_ll(SIZE(Z3D,1),SIZE(Z3D,2),SIZE(Z3D,3))) diff --git a/src/LIB/SURCOUCHE/src/mode_nest_ll.f90 b/src/LIB/SURCOUCHE/src/mode_nest_ll.f90 index 9d2d67859..cb4c8dcae 100644 --- a/src/LIB/SURCOUCHE/src/mode_nest_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_nest_ll.f90 @@ -10,6 +10,8 @@ ! $Revision$ ! $Date$ !----------------------------------------------------------------- +!Correction : +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !----------------------------------------------------------------- ! ################### @@ -1207,7 +1209,7 @@ LOGICAL :: LPREM INTEGER :: P1,P2 !JUAN Z_SPLITTING - + INTEGER :: IXSIZE,IYSIZE,IXSIZE_COARSE,IYSIZE_COARSE ! size of child without halo ! !------------------------------------------------------------------------------- ! @@ -1244,8 +1246,12 @@ ! ! 1.3 Dimensions of the child model ! - DIMX = NDXRATIO_ALL(K) * (NXEND_ALL(K)-NXOR_ALL(K) - 1) + 2*JPHEXT - DIMY = NDYRATIO_ALL(K) * (NYEND_ALL(K)-NYOR_ALL(K) - 1) + 2*JPHEXT + IXSIZE_COARSE=NXEND_ALL(K)-NXOR_ALL(K) -2*JPHEXT +1 + IYSIZE_COARSE=NYEND_ALL(K)-NYOR_ALL(K) -2*JPHEXT +1 + IXSIZE = NDXRATIO_ALL(K) * IXSIZE_COARSE + IYSIZE = NDYRATIO_ALL(K) * IYSIZE_COARSE + DIMX = IXSIZE + 2*JPHEXT + DIMY = IYSIZE + 2*JPHEXT !JUAN Z_SPLITTING DIMZ = NKMAX_ll + 2*JPVEXT !JUAN Z_SPLITTING @@ -1265,7 +1271,7 @@ ! ! find the B splitting, dimension without halo for FFT ! - CALL DEF_SPLITTING2(JX_DOMAINS,JY_DOMAINS,DIMX-2*JPHEXT,DIMY-2*JPHEXT,NPROC,LPREM) + CALL DEF_SPLITTING2(JX_DOMAINS,JY_DOMAINS,IXSIZE,IYSIZE,NPROC,LPREM) ! P1 = MIN(DIMZ,JX_DOMAINS) !JUAN PATCH NESTING DIFFERENT SHAPE @@ -1287,13 +1293,12 @@ ! ! find Z splitting wihout halo in X&Y , with halo in Z ! + CALL SPLIT2(IXSIZE_COARSE,IYSIZE_COARSE, NKMAX_ll, NPROC,TZCOARSE, YSPLITTING,P1,P2) - CALL SPLIT2(NXEND_ALL(K)-NXOR_ALL(K)-1, NYEND_ALL(K)-NYOR_ALL(K)-1, NKMAX_ll, NPROC,TZCOARSE, YSPLITTING,P1,P2) - - CALL SPLITZ(NXEND_ALL(K)-NXOR_ALL(K)-1,NYEND_ALL(K)-NYOR_ALL(K)-1,DIMZ,NPROC,TZDZP_SXP1_YP2_Z,'P1P2SPLITT', 1 ,P1,P2) - CALL SPLITZ(NXEND_ALL(K)-NXOR_ALL(K)-1,NYEND_ALL(K)-NYOR_ALL(K)-1,DIMZ,NPROC,TZDZP_SX_YP2_ZP1,'YSPLITTING', P1,P1,P2) - CALL SPLITZ(NXEND_ALL(K)-NXOR_ALL(K)-1,NYEND_ALL(K)-NYOR_ALL(K)-1,DIMZ,NPROC,TZDZP_SXP2_Y_ZP1,'XSPLITTING', P1,P1,P2) - CALL SPLITZ(NXEND_ALL(K)-NXOR_ALL(K)-1,NYEND_ALL(K)-NYOR_ALL(K)-1,DIMZ,NPROC,TZDZP_SXP2_YP1_Z,'P2P1SPLITT', 1 ,P1,P2) + CALL SPLITZ(IXSIZE_COARSE,IYSIZE_COARSE,DIMZ,NPROC,TZDZP_SXP1_YP2_Z,'P1P2SPLITT', 1 ,P1,P2) + CALL SPLITZ(IXSIZE_COARSE,IYSIZE_COARSE,DIMZ,NPROC,TZDZP_SX_YP2_ZP1,'YSPLITTING', P1,P1,P2) + CALL SPLITZ(IXSIZE_COARSE,IYSIZE_COARSE,DIMZ,NPROC,TZDZP_SXP2_Y_ZP1,'XSPLITTING', P1,P1,P2) + CALL SPLITZ(IXSIZE_COARSE,IYSIZE_COARSE,DIMZ,NPROC,TZDZP_SXP2_YP1_Z,'P2P1SPLITT', 1 ,P1,P2) CALL COARSE_TO_FINE(TZDZP_SXP1_YP2_Z) CALL COARSE_TO_FINE(TZDZP_SX_YP2_ZP1) @@ -1314,10 +1319,17 @@ DO J = 1, NPROC ! TZFINE(J)%NUMBER = TZCOARSE(J)%NUMBER - TZFINE(J)%NXOR = (TZCOARSE(J)%NXOR - 2) * NDXRATIO_ALL(K) + 2 - TZFINE(J)%NYOR = (TZCOARSE(J)%NYOR - 2) * NDYRATIO_ALL(K) + 2 - TZFINE(J)%NXEND = (TZCOARSE(J)%NXEND - 1) * NDXRATIO_ALL(K) + 1 - TZFINE(J)%NYEND = (TZCOARSE(J)%NYEND - 1) * NDYRATIO_ALL(K) + 1 + + TZFINE(J)%NXOR = (TZCOARSE(J)%NXOR - JPHEXT -1 ) * NDXRATIO_ALL(K) + JPHEXT +1 + TZFINE(J)%NYOR = (TZCOARSE(J)%NYOR - JPHEXT -1 ) * NDYRATIO_ALL(K) + JPHEXT +1 + TZFINE(J)%NXEND = (TZCOARSE(J)%NXEND - JPHEXT ) * NDXRATIO_ALL(K) + JPHEXT + TZFINE(J)%NYEND = (TZCOARSE(J)%NYEND - JPHEXT ) * NDYRATIO_ALL(K) + JPHEXT + +!!$ TZFINE(J)%NXOR = (TZCOARSE(J)%NXOR - 2) * NDXRATIO_ALL(K) + 2 +!!$ TZFINE(J)%NYOR = (TZCOARSE(J)%NYOR - 2) * NDYRATIO_ALL(K) + 2 +!!$ TZFINE(J)%NXEND = (TZCOARSE(J)%NXEND - 1) * NDXRATIO_ALL(K) + 1 +!!$ TZFINE(J)%NYEND = (TZCOARSE(J)%NYEND - 1) * NDYRATIO_ALL(K) + 1 + !JUAN Z_SPLITTING TZFINE(J)%NZOR = TZCOARSE(J)%NZOR TZFINE(J)%NZEND = TZCOARSE(J)%NZEND @@ -1355,15 +1367,24 @@ DO J = 1, NPROC ! TZSEND(J)%NUMBER = TZCOARSE(J)%NUMBER - TZSEND(J)%NXOR = NXOR_ALL(K) + TZCOARSE(J)%NXOR - 3 - TZSEND(J)%NYOR = NYOR_ALL(K) + TZCOARSE(J)%NYOR - 3 - TZSEND(J)%NXEND = NXOR_ALL(K) + TZCOARSE(J)%NXEND + 1 - TZSEND(J)%NYEND = NYOR_ALL(K) + TZCOARSE(J)%NYEND + 1 + + TZSEND(J)%NXOR = NXOR_ALL(K) + TZCOARSE(J)%NXOR -1 -JPHEXT -1 ! - 3 + TZSEND(J)%NYOR = NYOR_ALL(K) + TZCOARSE(J)%NYOR -1 -JPHEXT -1 ! - 3 + TZSEND(J)%NXEND = NXOR_ALL(K) + TZCOARSE(J)%NXEND -1 +JPHEXT +1 ! + 1 + TZSEND(J)%NYEND = NYOR_ALL(K) + TZCOARSE(J)%NYEND -1 +JPHEXT +1 ! + 1 +!!$ +!!$ TZSEND(J)%NXOR = NXOR_ALL(K) + TZCOARSE(J)%NXOR - 3 +!!$ TZSEND(J)%NYOR = NYOR_ALL(K) + TZCOARSE(J)%NYOR - 3 +!!$ TZSEND(J)%NXEND = NXOR_ALL(K) + TZCOARSE(J)%NXEND + 1 +!!$ TZSEND(J)%NYEND = NYOR_ALL(K) + TZCOARSE(J)%NYEND + 1 ! ENDDO ! - TZCHILD_COMDATA%NLSDIMX = TZCOARSE(IP)%NXEND - TZCOARSE(IP)%NXOR + 5 - TZCHILD_COMDATA%NLSDIMY = TZCOARSE(IP)%NYEND - TZCOARSE(IP)%NYOR + 5 + TZCHILD_COMDATA%NLSDIMX = TZCOARSE(IP)%NXEND - TZCOARSE(IP)%NXOR + 1 +2*(JPHEXT+1) ! + 5 + TZCHILD_COMDATA%NLSDIMY = TZCOARSE(IP)%NYEND - TZCOARSE(IP)%NYOR + 1 +2*(JPHEXT+1) ! + 5 +!!$ +!!$ TZCHILD_COMDATA%NLSDIMX = TZCOARSE(IP)%NXEND - TZCOARSE(IP)%NXOR + 5 +!!$ TZCHILD_COMDATA%NLSDIMY = TZCOARSE(IP)%NYEND - TZCOARSE(IP)%NYOR + 5 ! ! 2.5 TZRECV points of the coarse grid to be received from the child ! for each processor @@ -1643,10 +1664,17 @@ CONTAINS DO J = 1, NPROC ! TZ(J)%NUMBER = TZ(J)%NUMBER - TZ(J)%NXOR = (TZ(J)%NXOR - 2) * NDXRATIO_ALL(K) + 2 - TZ(J)%NYOR = (TZ(J)%NYOR - 2) * NDYRATIO_ALL(K) + 2 - TZ(J)%NXEND = (TZ(J)%NXEND - 1) * NDXRATIO_ALL(K) + 1 - TZ(J)%NYEND = (TZ(J)%NYEND - 1) * NDYRATIO_ALL(K) + 1 + + TZ(J)%NXOR = (TZ(J)%NXOR - JPHEXT -1) * NDXRATIO_ALL(K) + JPHEXT +1 ! -/+2 + TZ(J)%NYOR = (TZ(J)%NYOR - JPHEXT -1) * NDYRATIO_ALL(K) + JPHEXT +1 ! -/+2 + TZ(J)%NXEND = (TZ(J)%NXEND - JPHEXT) * NDXRATIO_ALL(K) + JPHEXT ! -/+1 + TZ(J)%NYEND = (TZ(J)%NYEND - JPHEXT) * NDYRATIO_ALL(K) + JPHEXT ! -/+1 +!!$ +!!$ TZ(J)%NXOR = (TZ(J)%NXOR - 2) * NDXRATIO_ALL(K) + 2 +!!$ TZ(J)%NYOR = (TZ(J)%NYOR - 2) * NDYRATIO_ALL(K) + 2 +!!$ TZ(J)%NXEND = (TZ(J)%NXEND - 1) * NDXRATIO_ALL(K) + 1 +!!$ TZ(J)%NYEND = (TZ(J)%NYEND - 1) * NDYRATIO_ALL(K) + 1 + !JUAN Z_SPLITTING TZ(J)%NZOR = TZ(J)%NZOR TZ(J)%NZEND = TZ(J)%NZEND diff --git a/src/LIB/SURCOUCHE/src/mode_sum_ll.f90 b/src/LIB/SURCOUCHE/src/mode_sum_ll.f90 index d508d724c..0fb298150 100644 --- a/src/LIB/SURCOUCHE/src/mode_sum_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_sum_ll.f90 @@ -10,6 +10,8 @@ ! $Revision$ ! $Date$ !----------------------------------------------------------------- +!Correction : +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !----------------------------------------------------------------- ! ################## @@ -2076,6 +2078,175 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! END SUBROUTINE SUM_DIM2_ll ! +! ##################################################### + SUBROUTINE SUM_DIM1_DD_ll(PFIELD, PRES, KDIM, KINFO) +! ##################################################### +! +!!**** *SUM_DIM1_DD_ll*- +! +!! Purpose +!! ------- +! The PFIELD argument is a local 1D array according the y-direction, +! result of local summations in x-direction. +! The purpose of this routine is to merge all the local sum arrays in a +! global one PRES. +! +!! Method +!! ------ +! Each processor fills its part of PRES array in an intermediate buffer +! ZBUF with its local PFIELD, then we reduce the buffer in the result PRES. +! +!! External +!! -------- +! +! Module MODE_TOOLS_ll +! LEAST_ll, LWEST_ll, LNORTH_ll, LSOUTH_ll +! +!! Implicit Arguments +!! ------------------ +! +! Module MODD_STRUCTURE_ll +! type MODELSPLITTING_ll +! +! Module MODD_VAR_ll +! TCRRT_COMDATA - Current communication data structure for current model +! and local processor +! TCRRT_PROCONF - Current configuration for current model +! IP - +! MPI_PRECISION - +! JPHALO - +! +!! Author +!! ------ +! Ph. Kloos * CNRM - CERFACS * +! +!! Modifications +!! ------------- +! Original 27/06/98 +! 05/99 : P. Jabouille - N. Gicquel +! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! + USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll +! + USE MODD_VAR_ll, ONLY : IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO, & + MPI_PRECISION +! + USE MODE_TOOLS_ll, ONLY : LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll +! + USE MODE_REPRO_SUM +! +!* 0. DECLARATIONS +! ------------ +! + IMPLICIT NONE +! +! +!* 0. DECLARATIONS +! ------------ +! +! +!* 0.1 Declarations of dummy arguments : +! + REAL, DIMENSION(:,:), INTENT(IN) :: PFIELD + REAL, DIMENSION(:), INTENT(OUT) :: PRES + INTEGER , INTENT(IN) :: KDIM +! + INTEGER, INTENT(OUT) :: KINFO ! MPI return status +! +!* 0.2 Declarations of local variables : +! + INTEGER :: IXB, IXE, IXBG, IXEG, IJB, IJE, IJBG, IJEG ! local and global displacements +! + TYPE(DOUBLE_DOUBLE), DIMENSION(SIZE(PFIELD,1),SIZE(PFIELD,2)) :: ZBUF + TYPE(DOUBLE_DOUBLE), DIMENSION(SIZE(PRES)) :: ZBUF1D_ll +! + TYPE(MODELSPLITTING_ll), POINTER :: TZSPLIT ! Intermediate model splitting +! + INTEGER :: JI,JJ +! +!----------------------------------------------------------------- +! +!* 1. Get the current splitting configuration and compute displacements +! + TZSPLIT => TCRRT_PROCONF%TSPLITS_B(IP) +! + ZBUF%R = 0.0 ; ZBUF%E = 0.0 + ZBUF1D_ll%R = 0.0 ; ZBUF1D_ll%E = 0.0 +! + IF (KDIM.EQ.1) THEN + IF (LSOUTH_ll()) THEN + IJB = 1 + IJBG = TZSPLIT%NYORE + ELSE + IJB = 1+JPHALO + IJBG = TZSPLIT%NYORP + ENDIF +! + IF (LNORTH_ll()) THEN + IJE = SIZE(PFIELD, 2) + IJEG = TZSPLIT%NYENDE + ELSE + IJE = SIZE(PFIELD, 2)-JPHALO + IJEG = TZSPLIT%NYENDP + ENDIF +! +!----------------------------------------------------------------- +! +!* 2. Fill the intermediate buffer +! + ZBUF(:,IJB:IJE)%R = PFIELD(:,IJB:IJE) + DO JJ=IJBG,IJEG + ZBUF1D_ll(JJ) = SUM_DD_DD1 (ZBUF(:,JJ-IJBG+IJB)) + END DO +! +!----------------------------------------------------------------- +! +!* 3. Merge local sums +! + CALL REDUCE_SUM_1DD_ll(ZBUF1D_ll, KINFO) + PRES = ZBUF1D_ll%R +! +!----------------------------------------------------------------- + ELSE + IF (KDIM.EQ.2) THEN + IF (LWEST_ll()) THEN + IXB = 1 + IXBG = TZSPLIT%NXORE + ELSE + IXB = 1+JPHALO + IXBG = TZSPLIT%NXORP + ENDIF +! + IF (LEAST_ll()) THEN + IXE = SIZE(PFIELD, 1) + IXEG = TZSPLIT%NXENDE + ELSE + IXE = SIZE(PFIELD, 1)-JPHALO + IXEG = TZSPLIT%NXENDP + ENDIF +! +!----------------------------------------------------------------- +! +!* 2. Fill the intermediate buffer +! + ZBUF(IXB:IXE,:)%R = PFIELD(IXB:IXE,:) + DO JI=IXBG,IXEG + ZBUF1D_ll(JI) = SUM_DD_DD1 (ZBUF(JI-IXBG+IXB,:)) + END DO +! +!----------------------------------------------------------------- +! +!* 2. Merge local sums +! + CALL REDUCE_SUM_1DD_ll(ZBUF1D_ll, KINFO) + PRES = ZBUF1D_ll%R + ENDIF + ENDIF + + END SUBROUTINE SUM_DIM1_DD_ll ! ##################################################### SUBROUTINE SUM_DIM1_ll(PFIELD, PRES, KINFO) ! ##################################################### @@ -2294,7 +2465,8 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! ------------------------------ ! IF (FIRST_CALL_DD) CALL INIT_DD(KINFO) - CALL MPI_ALLREDUCE(PRES%R, ZRES%R, 1, MNH_DOUBLE_DOUBLE , & + ZRES%R = 0.0 ; ZRES%E = 0.0 + CALL MPI_ALLREDUCE(PRES, ZRES, 1, MNH_DOUBLE_DOUBLE , & MNH_SUM_DD, NMNH_COMM_WORLD, KINFO) PRES = ZRES @@ -2410,7 +2582,8 @@ END SUBROUTINE REDUCE_SUM_0DD_ll ! ------------------------------ ! IF (FIRST_CALL_DD) CALL INIT_DD(KINFO) - CALL MPI_ALLREDUCE(PRES%R, ZRES%R, SIZE(PRES), MNH_DOUBLE_DOUBLE , & + ZRES%R = 0.0 ; ZRES%E = 0.0 + CALL MPI_ALLREDUCE(PRES, ZRES, SIZE(PRES), MNH_DOUBLE_DOUBLE , & MNH_SUM_DD, NMNH_COMM_WORLD, KINFO) PRES = ZRES ! diff --git a/src/LIB/SURCOUCHE/src/mode_tools_ll.f90 b/src/LIB/SURCOUCHE/src/mode_tools_ll.f90 index b606fd4ab..441b52543 100644 --- a/src/LIB/SURCOUCHE/src/mode_tools_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_tools_ll.f90 @@ -10,6 +10,8 @@ ! $Revision$ ! $Date$ !----------------------------------------------------------------- +!Correction : +! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !----------------------------------------------------------------- ! #################### @@ -777,6 +779,8 @@ NXOR_ALL, NYOR_ALL, & NXEND_ALL, NYEND_ALL USE MODD_VAR_ll, ONLY : TCRRT_PROCONF + + USE MODD_PARAMETERS_ll, ONLY : JPHEXT ! IMPLICIT NONE ! @@ -797,8 +801,8 @@ ! !* 2. Compute the dimensions of the model ! - KIMAX = NDXRATIO_ALL(IMODEL) * (NXEND_ALL(IMODEL)-NXOR_ALL(IMODEL) - 1) - KJMAX = NDYRATIO_ALL(IMODEL) * (NYEND_ALL(IMODEL)-NYOR_ALL(IMODEL) - 1) + KIMAX = NDXRATIO_ALL(IMODEL) * (NXEND_ALL(IMODEL)-NXOR_ALL(IMODEL) -2*JPHEXT + 1) + KJMAX = NDYRATIO_ALL(IMODEL) * (NYEND_ALL(IMODEL)-NYOR_ALL(IMODEL) -2*JPHEXT + 1) ! !------------------------------------------------------------------------------- ! @@ -1843,10 +1847,10 @@ ! !* 1.1 Get current splitting ! - IF (LWEST_ll()) IWEST=-1 - IF (LEAST_ll()) IEAST=1 - IF (LNORTH_ll()) INORTH=1 - IF (LSOUTH_ll()) ISOUTH=-1 + IF (LWEST_ll()) IWEST=-JPHEXT ! -1 + IF (LEAST_ll()) IEAST=JPHEXT ! 1 + IF (LNORTH_ll()) INORTH=JPHEXT ! 1 + IF (LSOUTH_ll()) ISOUTH=-JPHEXT ! -1 TZSPLIT => TCRRT_PROCONF%TSPLITS_B(IP) IOR(1) = TZSPLIT%NXORP+IWEST IOR(2) = TZSPLIT%NYORP+ISOUTH diff --git a/src/MNH/adv_boundaries.f90 b/src/MNH/adv_boundaries.f90 index d2553bea9..63f9001a7 100644 --- a/src/MNH/adv_boundaries.f90 +++ b/src/MNH/adv_boundaries.f90 @@ -32,8 +32,9 @@ END MODULE MODI_ADV_BOUNDARIES !! !! AUTHOR !! ------ -!! !! +!! Correction : +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -58,11 +59,13 @@ CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: HFIELD ! Field type INTEGER :: IKB ! indice K Beginning in z direction INTEGER :: IKE ! indice K End in z direction INTEGER :: IIU, IJU ! Index End in X and Y directions +INTEGER :: IIB,IIE,IJB,IJE ! interior domaine bound ! !------------------------------------------------------------------------------- ! !* 1. COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES: ! ---------------------------------------------- +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKE = SIZE(PFIELD,3) - JPVEXT IIU=SIZE(PFIELD,1) @@ -95,24 +98,24 @@ IF (SIZE(PFIELD)==0) RETURN ! IF( PRESENT(PFIELDI) ) THEN IF (HLBCX(1)=='OPEN' .AND. LWEST_ll()) THEN - PFIELD(1,:,:) = PFIELDI(1,:,:) + PFIELD(:IIB-1,:,:) = PFIELDI(:IIB-1,:,:) ! 1 IF (PRESENT(HFIELD)) THEN IF (HFIELD=='U') & - PFIELD(2,:,:) = PFIELDI(2,:,:) + PFIELD(:IIB,:,:) = PFIELDI(:IIB,:,:) ! 2 END IF END IF IF (HLBCX(2)=='OPEN' .AND. LEAST_ll()) THEN - PFIELD(IIU,:,:) = PFIELDI(IIU,:,:) + PFIELD(IIE+1:,:,:) = PFIELDI(IIE+1:,:,:) ! IIU END IF IF (HLBCY(1)=='OPEN' .AND. LSOUTH_ll()) THEN - PFIELD(:,1,:) = PFIELDI(:,1,:) + PFIELD(:,:IJB-1,:) = PFIELDI(:,:IJB-1,:) ! 1 IF (PRESENT(HFIELD)) THEN IF (HFIELD=='V') & - PFIELD(:,2,:) = PFIELDI(:,2,:) + PFIELD(:,:IJB,:) = PFIELDI(:,:IJB,:) ! 2 END IF END IF IF (HLBCY(2)=='OPEN' .AND. LNORTH_ll()) THEN - PFIELD(:,IJU,:) = PFIELDI(:,IJU,:) + PFIELD(:,IJE+1:,:) = PFIELDI(:,IJE+1:,:) ! IJU END IF END IF ! diff --git a/src/MNH/advec_3rd_order_aux.f90 b/src/MNH/advec_3rd_order_aux.f90 index 1be4845b8..f74f3eb83 100644 --- a/src/MNH/advec_3rd_order_aux.f90 +++ b/src/MNH/advec_3rd_order_aux.f90 @@ -5,6 +5,12 @@ ! ############################### MODULE MODI_ADVEC_3RD_ORDER_AUX ! ############################### +!! AUTHOR +!! ------ +!! +!! Correction : +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!------------------------------------------------------------------------------- ! INTERFACE ! @@ -183,16 +189,16 @@ SELECT CASE ( HLBCX(1) ) ! X direction LBC type: (1) for left side ! CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IW=IIB+1 IE=IIE - ELSE - CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP) - WRITE(ILUOUT,*) 'ERROR : 3rd order advection in CYCLic case ' - WRITE(ILUOUT,*) 'cannot be used with NHALO=2' - CALL ABORT - STOP - END IF +!!$ ELSE +!!$ CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP) +!!$ WRITE(ILUOUT,*) 'ERROR : 3rd order advection in CYCLic case ' +!!$ WRITE(ILUOUT,*) 'cannot be used with NHALO=2' +!!$ CALL ABORT +!!$ STOP +!!$ END IF ! IWF=IW-1 IEF=IE-1 @@ -221,13 +227,14 @@ CASE ('OPEN','WALL','NEST') IF (LWEST_ll()) THEN IW=IIB+2 ! special case of C grid ELSE - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IW=IIB+1 - ELSE - IW=IIB - ENDIF +!!$ ELSE +!!$ IW=IIB +!!$ ENDIF ENDIF - IF (LEAST_ll() .OR. NHALO == 1) THEN +!!$ IF (LEAST_ll() .OR. NHALO == 1) THEN + IF (LEAST_ll()) THEN IE=IIE ELSE IE=IIE @@ -239,7 +246,8 @@ CASE ('OPEN','WALL','NEST') IF(LWEST_ll()) THEN PR(IWF-1,:,:) = PSRC(IW-2,:,:) * (0.5+SIGN(0.5,PRUCT(IW-2,:,:))) & + PSRC(IW-1,:,:) * (0.5-SIGN(0.5,PRUCT(IW-2,:,:))) - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE PR(IWF-1,:,:) = 1./6. * ( (2.*PSRC(IW-1,:,:) + 5.*PSRC(IW-2,:,:) - & TPHALO2%WEST(:,:)) * (0.5+SIGN(0.5,PRUCT(IW-2,:,:))) & + (5.*PSRC(IW-1,:,:) + 2.*PSRC(IW-2,:,:) - & @@ -249,7 +257,8 @@ CASE ('OPEN','WALL','NEST') IF(LEAST_ll()) THEN PR(IEF+1,:,:) = PSRC(IE,:,:) * (0.5+SIGN(0.5,PRUCT(IE,:,:))) & + PSRC(IE+1,:,:) * (0.5-SIGN(0.5,PRUCT(IE,:,:))) - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE PR(IEF+1,:,:) = 1./6. * ( (2.*PSRC(IE+1,:,:) + 5.*PSRC(IE,:,:) - & PSRC(IE-1,:,:)) * (0.5+SIGN(0.5,PRUCT(IE,:,:))) & + (5.*PSRC(IE+1,:,:) + 2.*PSRC(IE,:,:) - & @@ -336,16 +345,16 @@ SELECT CASE ( HLBCX(1) ) ! X direction LBC type: (1) for left side ! CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IW=IIB+1 IE=IIE - ELSE - CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP) - WRITE(ILUOUT,*) 'ERROR : 3rd order advection in CYCLic case ' - WRITE(ILUOUT,*) 'cannot be used with NHALO=2' - CALL ABORT - STOP - END IF +!!$ ELSE +!!$ CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP) +!!$ WRITE(ILUOUT,*) 'ERROR : 3rd order advection in CYCLic case ' +!!$ WRITE(ILUOUT,*) 'cannot be used with NHALO=2' +!!$ CALL ABORT +!!$ STOP +!!$ END IF ! IWF=IW IEF=IE @@ -374,13 +383,14 @@ CASE ('OPEN','WALL','NEST') IF (LWEST_ll()) THEN IW=IIB+1 ELSE - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IW=IIB+1 - ELSE - IW=IIB - ENDIF +!!$ ELSE +!!$ IW=IIB +!!$ ENDIF ENDIF - IF (LEAST_ll() .OR. NHALO == 1) THEN +!!$ IF (LEAST_ll() .OR. NHALO == 1) THEN + IF (LEAST_ll()) THEN IE=IIE ELSE IE=IIE @@ -392,7 +402,8 @@ CASE ('OPEN','WALL','NEST') IF(LWEST_ll()) THEN PR(IWF-1,:,:) = PSRC(IW-2,:,:) * (0.5+SIGN(0.5,PRUCT(IW-1,:,:))) & + PSRC(IW-1,:,:) * (0.5-SIGN(0.5,PRUCT(IW-1,:,:))) - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE PR(IWF-1,:,:) = 1./6. * ( (2.*PSRC(IW-1,:,:) + 5.*PSRC(IW-2,:,:) - & TPHALO2%WEST(:,:)) * (0.5+SIGN(0.5,PRUCT(IW-1,:,:))) & + (5.*PSRC(IW-1,:,:) + 2.*PSRC(IW-2,:,:) - & @@ -402,7 +413,8 @@ CASE ('OPEN','WALL','NEST') IF(LEAST_ll()) THEN PR(IEF+1,:,:) = PSRC(IE,:,:) * (0.5+SIGN(0.5,PRUCT(IE+1,:,:))) & + PSRC(IE+1,:,:) * (0.5-SIGN(0.5,PRUCT(IE+1,:,:))) - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE PR(IEF+1,:,:) = 1./6. * ( (2.*PSRC(IE+1,:,:) + 5.*PSRC(IE,:,:) - & PSRC(IE-1,:,:)) * (0.5+SIGN(0.5,PRUCT(IE+1,:,:))) & + (5.*PSRC(IE+1,:,:) + 2.*PSRC(IE,:,:) - & @@ -488,16 +500,16 @@ SELECT CASE ( HLBCY(1) ) ! ! CASE ('CYCL') ! In that case one must have HLBCY(1) == HLBCY(2) ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IS=IJB+1 IN=IJE - ELSE - CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP) - WRITE(ILUOUT,*) 'ERROR : 4th order advection in CYCLic case ' - WRITE(ILUOUT,*) 'cannot be used with NHALO=2' - CALL ABORT - STOP - END IF +!!$ ELSE +!!$ CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP) +!!$ WRITE(ILUOUT,*) 'ERROR : 4th order advection in CYCLic case ' +!!$ WRITE(ILUOUT,*) 'cannot be used with NHALO=2' +!!$ CALL ABORT +!!$ STOP +!!$ END IF ! ISF=IS-1 INF=IN-1 @@ -526,13 +538,14 @@ CASE ('OPEN','WALL','NEST') IF (LSOUTH_ll()) THEN IS=IJB+2 ELSE - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IS=IJB+1 - ELSE - IS=IJB - ENDIF +!!$ ELSE +!!$ IS=IJB +!!$ ENDIF ENDIF - IF (LNORTH_ll() .OR. NHALO == 1) THEN +!!$ IF (LNORTH_ll() .OR. NHALO == 1) THEN + IF (LNORTH_ll()) THEN IN=IJE ELSE IN=IJE @@ -544,7 +557,8 @@ CASE ('OPEN','WALL','NEST') IF(LSOUTH_ll()) THEN PR(:,ISF-1,:) = PSRC(:,IS-2,:) * (0.5+SIGN(0.5,PRVCT(:,IS-2,:))) & + PSRC(:,IS-1,:) * (0.5-SIGN(0.5,PRVCT(:,IS-2,:))) - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE PR(:,ISF-1,:) = 1./6. * ( (2.*PSRC(:,IS-1,:) + 5.*PSRC(:,IS-2,:) - & TPHALO2%SOUTH(:,:)) * (0.5+SIGN(0.5,PRVCT(:,IS-2,:))) & + (5.*PSRC(:,IS-1,:) + 2.*PSRC(:,IS-2,:) - & @@ -554,7 +568,8 @@ CASE ('OPEN','WALL','NEST') IF(LNORTH_ll()) THEN PR(:,INF+1,:) = PSRC(:,IN,:) * (0.5+SIGN(0.5,PRVCT(:,IN,:))) & + PSRC(:,IN+1,:) * (0.5-SIGN(0.5,PRVCT(:,IN,:))) - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE PR(:,INF+1,:) = 1./6. * ( (2.*PSRC(:,IN+1,:) + 5.*PSRC(:,IN,:) - & PSRC(:,IN-1,:)) * (0.5+SIGN(0.5,PRVCT(:,IN,:))) & + (5.*PSRC(:,IN+1,:) + 2.*PSRC(:,IN,:) - & @@ -641,16 +656,16 @@ SELECT CASE ( HLBCY(1) ) ! Y direction LBC type: (1) for left side ! CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IS=IJB+1 IN=IJE - ELSE - CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP) - WRITE(ILUOUT,*) 'ERROR : 4th order advection in CYCLic case ' - WRITE(ILUOUT,*) 'cannot be used with NHALO=2' - CALL ABORT - STOP - END IF +!!$ ELSE +!!$ CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP) +!!$ WRITE(ILUOUT,*) 'ERROR : 4th order advection in CYCLic case ' +!!$ WRITE(ILUOUT,*) 'cannot be used with NHALO=2' +!!$ CALL ABORT +!!$ STOP +!!$ END IF ! ISF=IS INF=IN @@ -679,13 +694,14 @@ CASE ('OPEN','WALL','NEST') IF (LSOUTH_ll()) THEN IS=IJB+1 ELSE - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IS=IJB+1 - ELSE - IS=IJB - ENDIF +!!$ ELSE +!!$ IS=IJB +!!$ ENDIF ENDIF - IF (LNORTH_ll() .OR. NHALO == 1) THEN +!!$ IF (LNORTH_ll() .OR. NHALO == 1) THEN + IF (LNORTH_ll()) THEN IN=IJE ELSE IN=IJE @@ -697,7 +713,8 @@ CASE ('OPEN','WALL','NEST') IF(LSOUTH_ll()) THEN PR(:,ISF-1,:) = PSRC(:,IS-2,:) * (0.5+SIGN(0.5,PRVCT(:,IS-1,:))) & + PSRC(:,IS-1,:) * (0.5-SIGN(0.5,PRVCT(:,IS-1,:))) - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE PR(:,ISF-1,:) = 1./6. * ( (2.*PSRC(:,IS-1,:) + 5.*PSRC(:,IS-2,:) - & TPHALO2%SOUTH(:,:)) * (0.5+SIGN(0.5,PRVCT(:,IS-1,:))) & + (5.*PSRC(:,IS-1,:) + 2.*PSRC(:,IS-2,:) - & @@ -707,7 +724,8 @@ CASE ('OPEN','WALL','NEST') IF(LNORTH_ll()) THEN PR(:,INF+1,:) = PSRC(:,IN,:) * (0.5+SIGN(0.5,PRVCT(:,IN+1,:))) & + PSRC(:,IN+1,:) * (0.5-SIGN(0.5,PRVCT(:,IN+1,:))) - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE PR(:,INF+1,:) = 1./6. * ( (2.*PSRC(:,IN+1,:) + 5.*PSRC(:,IN,:) - & PSRC(:,IN-1,:)) * (0.5+SIGN(0.5,PRVCT(:,IN+1,:))) & + (5.*PSRC(:,IN+1,:) + 2.*PSRC(:,IN,:) - & diff --git a/src/MNH/advecmet_4th.f90 b/src/MNH/advecmet_4th.f90 index 892d14670..b708b8cf0 100644 --- a/src/MNH/advecmet_4th.f90 +++ b/src/MNH/advecmet_4th.f90 @@ -150,6 +150,9 @@ END MODULE MODI_ADVECMET_4TH !! ------------- !! Original 25/10/05 !! +!! Correction : +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -222,13 +225,13 @@ IKU=SIZE(XZHAT) ! IGRID = 1 ! -IF (NHALO == 1) THEN +!!$IF (NHALO == 1) THEN TZHALO2LIST => TPHALO2LIST CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PTHT, IGRID, ZMEANX, ZMEANY, & TZHALO2LIST%HALO2 ) -ELSE - CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PTHT, IGRID, ZMEANX, ZMEANY) -ENDIF +!!$ELSE +!!$ CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PTHT, IGRID, ZMEANX, ZMEANY) +!!$ENDIF ! ! Thermodynamical variable ! @@ -247,13 +250,13 @@ IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVZ_BU_RTH') ! Turbulence variables ! IF ( GTKEALLOC ) THEN - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TZHALO2LIST%NEXT CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PTKET, IGRID, & ZMEANX, ZMEANY, TPHALO2=TZHALO2LIST%HALO2) - ELSE - CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PTKET, IGRID, ZMEANX, ZMEANY) - ENDIF +!!$ ELSE +!!$ CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PTKET, IGRID, ZMEANX, ZMEANY) +!!$ ENDIF ! PRTKES(:,:,:) = PRTKES(:,:,:) & -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) @@ -272,13 +275,13 @@ ENDIF ! Case with KRR moist variables ! DO JRR=1, KRR - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TZHALO2LIST%NEXT CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PRT(:,:,:,JRR), IGRID, & ZMEANX, ZMEANY,TPHALO2=TZHALO2LIST%HALO2 ) - ELSE - CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PRT(:,:,:,JRR), IGRID, ZMEANX, ZMEANY) - ENDIF +!!$ ELSE +!!$ CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PRT(:,:,:,JRR), IGRID, ZMEANX, ZMEANY) +!!$ ENDIF ! PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) & -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) diff --git a/src/MNH/advecscalar_4th.f90 b/src/MNH/advecscalar_4th.f90 index a270b9208..1cf233594 100644 --- a/src/MNH/advecscalar_4th.f90 +++ b/src/MNH/advecscalar_4th.f90 @@ -109,6 +109,9 @@ END MODULE MODI_ADVECSCALAR_4TH !! ------------- !! Original 25/10/05 !! +!! Correction : +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -180,13 +183,13 @@ IGRID = 1 ! DO JSV=1,KSV ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TPHALO2LIST CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PSVT(:,:,:,JSV), IGRID, & ZMEANX, ZMEANY,TZHALO2LIST%HALO2 ) - ELSE - CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PSVT(:,:,:,JSV), IGRID, ZMEANX, ZMEANY) - ENDIF +!!$ ELSE +!!$ CALL ADVEC_4TH_ORDER_ALGO(HLBCX, HLBCY, PSVT(:,:,:,JSV), IGRID, ZMEANX, ZMEANY) +!!$ ENDIF ! PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) & -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90 index 852336654..01f9a90dd 100644 --- a/src/MNH/advection_metsv.f90 +++ b/src/MNH/advection_metsv.f90 @@ -125,7 +125,8 @@ END MODULE MODI_ADVECTION_METSV !! 04/2014 (C.Lac) adaptation of time !! splitting for L1D and L2D !! 09/2014 (G.Delautier) close OUTPUT_LISTING before STOP -!! 04/2015 (J.Escoabar) remove/commente some NHALO=1 test +!! 04/2015 (J.Escobar) remove/commente some NHALO=1 test +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -248,11 +249,13 @@ CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file INTEGER :: ILUOUT ! logical unit INTEGER :: ISPLIT_PPM ! temporal time splitting +INTEGER :: IIB, IIE, IJB, IJE !------------------------------------------------------------------------------- ! !* 0. INITIALIZATION ! -------------- ! +CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) ! GTKE=(SIZE(PTKET)/=0) ! @@ -273,9 +276,10 @@ END IF !* 2.2 computes CFL numbers ! IF (.NOT. L1D) THEN - ZCFLU = ABS(ZRUCPPM * PTSTEP) - ZCFLV = ABS(ZRVCPPM * PTSTEP) - ZCFLW = ABS(ZRWCPPM * PTSTEP) + ZCFLU = 0.0 ; ZCFLV = 0.0 ; ZCFLW = 0.0 + ZCFLU(IIB:IIE,IJB:IJE,:) = ABS(ZRUCPPM(IIB:IIE,IJB:IJE,:) * PTSTEP) + ZCFLV(IIB:IIE,IJB:IJE,:) = ABS(ZRVCPPM(IIB:IIE,IJB:IJE,:) * PTSTEP) + ZCFLW(IIB:IIE,IJB:IJE,:) = ABS(ZRWCPPM(IIB:IIE,IJB:IJE,:) * PTSTEP) IF (.NOT. L2D) THEN ZCFL = SQRT(ZCFLU**2+ZCFLV**2+ZCFLW**2) ELSE diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90 index 845038e19..cc947f197 100644 --- a/src/MNH/advection_uvw.f90 +++ b/src/MNH/advection_uvw.f90 @@ -89,6 +89,7 @@ END MODULE MODI_ADVECTION_UVW !! 04/2011 (V. Masson & C. Lac) splits the routine and adds !! time splitting !! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -100,6 +101,7 @@ USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll USE MODD_PARAMETERS, ONLY : JPVEXT USE MODD_CONF, ONLY : NHALO USE MODD_BUDGET +USE MODD_BLANK, ONLY : NDUMMY1 ! USE MODI_SHUMAN USE MODI_CONTRAV @@ -254,8 +256,8 @@ NULLIFY(TZFIELDS0_ll) ! !------------------------------------------------------------------------------- ! -ISPLIT = 2 * KSPLIT_PPM -ZTSTEP = PTSTEP / REAL(ISPLIT) +ISPLIT = 1 + NDUMMY1 +ZTSTEP = PTSTEP / REAL(ISPLIT) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/advecuvw_rk.f90 b/src/MNH/advecuvw_rk.f90 index df64c1fd1..9e9dfe35d 100644 --- a/src/MNH/advecuvw_rk.f90 +++ b/src/MNH/advecuvw_rk.f90 @@ -31,8 +31,7 @@ REAL, INTENT(IN) :: PTSTEP REAL, DIMENSION(:,:,:), INTENT(IN) :: PU , PV , PW ! Variables to advect REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT, PVT , PWT - ! Variables for boundary - ! conditions + ! Variables at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PMXM_RHODJ REAL, DIMENSION(:,:,:), INTENT(IN) :: PMYM_RHODJ REAL, DIMENSION(:,:,:), INTENT(IN) :: PMZM_RHODJ @@ -101,6 +100,7 @@ END MODULE MODI_ADVECUVW_RK !! 04/2011 (V. Masson & C. Lac) splits the routine and adds !! time splitting !! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -116,6 +116,7 @@ USE MODI_SHUMAN USE MODI_ADVECUVW_WENO_K USE MODI_ADV_BOUNDARIES USE MODI_GET_HALO +USE MODE_MPPDB ! !------------------------------------------------------------------------------- ! @@ -136,8 +137,7 @@ REAL, INTENT(IN) :: PTSTEP REAL, DIMENSION(:,:,:), INTENT(IN) :: PU , PV , PW ! Variables to advect REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT, PVT , PWT - ! Variables for boundary - ! conditions + ! Variables at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PMXM_RHODJ REAL, DIMENSION(:,:,:), INTENT(IN) :: PMYM_RHODJ REAL, DIMENSION(:,:,:), INTENT(IN) :: PMZM_RHODJ @@ -203,35 +203,111 @@ SELECT CASE (HTEMP_SCHEME) ISPL = 1 CASE('RK21') ISPL = 2 + CASE('NP32') + ISPL = 3 + CASE('SP32') + ISPL = 3 CASE('RK33') ISPL = 3 + CASE('RKC4') + ISPL = 4 + CASE('RK4B') + ISPL = 4 CASE('RK53') ISPL = 5 + CASE('RK62') + ISPL = 6 + CASE('RK65') + ISPL = 6 END SELECT ! ! ALLOCATE(ZBUT(ISPL-1,ISPL-1)) ALLOCATE(ZBUTS(ISPL)) ! -IF (ISPL == 1 ) ZBUTS = (/ 1. /) -IF (ISPL == 2 ) THEN - ZBUTS = (/ 0. , 1. /) - ZBUT(1,1) = 3./4. -END IF -IF (ISPL == 3 ) THEN - ZBUTS = (/ 1./6. , 1./6. , 2./3. /) - ZBUT(1,1) = 1. - ZBUT(1,2) = 0. - ZBUT(2,:) = 1./4. -END IF -IF (ISPL == 5 ) THEN - ZBUTS = (/ 1./4. , 0., 0., 0., 3./4. /) - ZBUT = 0. - ZBUT(1,1) = 1./7. - ZBUT(2,2) = 3./16. - ZBUT(3,3) = 1./3. - ZBUT(4,4) = 2./3. -END IF +SELECT CASE (HTEMP_SCHEME) + CASE('RK11') + ZBUTS = (/ 1. /) + CASE('RK21') + ZBUTS = (/ 0. , 1. /) + ZBUT(1,1) = 3./4. + CASE('RK33') + ZBUTS = (/ 1./6. , 1./6. , 2./3. /) + ZBUT(1,1) = 1. + ZBUT(1,2) = 0. + ZBUT(2,1) = 1./4. + ZBUT(2,2) = 1./4. + CASE('NP32') + ZBUTS = (/ 1./2. , 0., 1./2. /) + ZBUT(1,1) = 1./3. + ZBUT(1,2) = 0. + ZBUT(2,1) = 0. + ZBUT(2,2) = 1. + CASE('SP32') + ZBUTS = (/ 1./3. , 1./3. , 1./3. /) + ZBUT(1,1) = 1./2. + ZBUT(1,2) = 0. + ZBUT(2,1) = 1./2. + ZBUT(2,2) = 1./2. + CASE('RKC4') + ZBUTS = (/ 1./6. , 1./3. , 1./3. , 1./6./) + ZBUT = 0. + ZBUT(1,1) = 1./2. + ZBUT(2,2) = 1./2. + ZBUT(3,3) = 1. + CASE('RK4B') + ZBUTS = (/ 1./8. , 3./8. , 3./8. , 1./8./) + ZBUT = 0. + ZBUT(1,1) = 1./3. + ZBUT(2,1) = -1./3. + ZBUT(2,2) = 1. + ZBUT(3,1) = 1. + ZBUT(3,2) = -1. + ZBUT(3,3) = 1. + CASE('RK53') + ZBUTS = (/ 1./4. , 0. , 0. , 0. , 3./4. /) + ZBUT = 0. + ZBUT(1,1) = 1./7. + ZBUT(2,2) = 3./16. + ZBUT(3,3) = 1./3. + ZBUT(4,4) = 2./3. + CASE('RK62') + ZBUTS = (/ 1./6. , 1./6. , 1./6. , 1./6. , 1./6. , 1./6. /) + ZBUT = 0. + ZBUT(1,1) = 1./5. + ZBUT(2,1) = 1./5. + ZBUT(2,2) = 1./5. + ZBUT(3,1) = 1./5. + ZBUT(3,2) = 1./5. + ZBUT(3,3) = 1./5. + ZBUT(4,1) = 1./5. + ZBUT(4,2) = 1./5. + ZBUT(4,3) = 1./5. + ZBUT(4,4) = 1./5. + ZBUT(5,1) = 1./5. + ZBUT(5,2) = 1./5. + ZBUT(5,3) = 1./5. + ZBUT(5,4) = 1./5. + ZBUT(5,5) = 1./5. +CASE('RK65') + ZBUTS= (/ 7./90. , 0. , 16./45. , 2./15. , 16./45. , 7./90. /) + ZBUT= 0. + ZBUT(1,1) = 1./4. + ZBUT(2,1) = 1./8. + ZBUT(2,2) = 1./8. + ZBUT(3,1) = 0 + ZBUT(3,2) = -1./2. + ZBUT(3,3) = 1 + ZBUT(4,1) = 3./16. + ZBUT(4,2) = 0 + ZBUT(4,3) = 0 + ZBUT(4,4) = 9./16. + ZBUT(5,1) = -3./7. + ZBUT(5,2) = 2./7. + ZBUT(5,3) = 12./7. + ZBUT(5,4) = -12./7. + ZBUT(5,5) = 8./7. +END SELECT ! ALLOCATE(ZRUS(SIZE(PUT,1),SIZE(PUT,2),SIZE(PWT,3),ISPL)) ALLOCATE(ZRVS(SIZE(PUT,1),SIZE(PUT,2),SIZE(PWT,3),ISPL)) @@ -259,18 +335,12 @@ ZU = PU ZV = PV ZW = PW ! -NULLIFY(TZFIELDMT_ll) -!!$IF( NHALO==1 ) THEN -! - CALL ADD3DFIELD_ll(TZFIELDMT_ll, ZUT) - CALL ADD3DFIELD_ll(TZFIELDMT_ll, ZVT) - CALL ADD3DFIELD_ll(TZFIELDMT_ll, ZWT) -! - INBVAR = 3 -!!$ IF( NHALO==1 ) - CALL INIT_HALO2_ll(TZHALO2MT_ll,INBVAR,SIZE(PUT,1),SIZE(PUT,2),SIZE(PWT,3)) -! -!!$ END IF +NULLIFY(TZFIELDMT_ll) +CALL ADD3DFIELD_ll(TZFIELDMT_ll, ZUT) +CALL ADD3DFIELD_ll(TZFIELDMT_ll, ZVT) +CALL ADD3DFIELD_ll(TZFIELDMT_ll, ZWT) +INBVAR = 3 +CALL INIT_HALO2_ll(TZHALO2MT_ll,INBVAR,SIZE(PUT,1),SIZE(PUT,2),SIZE(PWT,3)) ! ZRUS = 0. ZRVS = 0. @@ -281,71 +351,65 @@ ZRWS = 0. ! ----------------------------- ! DO JS = 1, ISPL -! -! - CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZUT, PUT, 'U' ) - CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZVT, PVT, 'V' ) - CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZWT, PWT, 'W' ) - ZW (:,:,IKE+1 ) = 0. - !JUAN -!!$ IF ( NHALO == 1 ) THEN - CALL UPDATE_HALO_ll(TZFIELDMT_ll,IINFO_ll) - CALL UPDATE_HALO2_ll(TZFIELDMT_ll, TZHALO2MT_ll, IINFO_ll) -!!$ ENDIF - !JUAN +! + CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZUT, PUT, 'U' ) + CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZVT, PVT, 'V' ) + CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZWT, PWT, 'W' ) +! + ZW (:,:,IKE+1 ) = 0. +! + CALL UPDATE_HALO_ll(TZFIELDMT_ll,IINFO_ll) + CALL UPDATE_HALO2_ll(TZFIELDMT_ll, TZHALO2MT_ll, IINFO_ll) ! !* 4. Advection with WENO ! ------------------- ! - CALL ADVECUVW_WENO_K (HLBCX, HLBCY, KWENO_ORDER, ZUT, ZVT, ZWT, & - PRUCT, PRVCT, PRWCT, & - ZRUS(:,:,:,JS), ZRVS(:,:,:,JS), ZRWS(:,:,:,JS), & - TZHALO2MT_ll ) -! -! -! ==> verifier si c'est utile ! -! + CALL ADVECUVW_WENO_K (HLBCX, HLBCY, KWENO_ORDER, ZUT, ZVT, ZWT, & + PRUCT, PRVCT, PRWCT, & + ZRUS(:,:,:,JS), ZRVS(:,:,:,JS), ZRWS(:,:,:,JS), & + TZHALO2MT_ll ) +! NULLIFY(TZFIELDS4_ll) -!!$ IF(NHALO == 1) THEN - CALL ADD3DFIELD_ll(TZFIELDS4_ll, ZRUS(:,:,:,JS)) - CALL ADD3DFIELD_ll(TZFIELDS4_ll, ZRVS(:,:,:,JS)) - CALL ADD3DFIELD_ll(TZFIELDS4_ll, ZRWS(:,:,:,JS)) - CALL UPDATE_HALO_ll(TZFIELDS4_ll,IINFO_ll) - CALL CLEANLIST_ll(TZFIELDS4_ll) -!!$ END IF - - IF ( JS /= ISPL ) THEN ! + CALL ADD3DFIELD_ll(TZFIELDS4_ll, ZRUS(:,:,:,JS)) + CALL ADD3DFIELD_ll(TZFIELDS4_ll, ZRVS(:,:,:,JS)) + CALL ADD3DFIELD_ll(TZFIELDS4_ll, ZRWS(:,:,:,JS)) + CALL UPDATE_HALO_ll(TZFIELDS4_ll,IINFO_ll) + CALL CLEANLIST_ll(TZFIELDS4_ll) +! + IF ( JS /= ISPL ) THEN +! + DO JI = 1, JS - DO JI = 1, JS - + ZUT = ZU + ZVT = ZV + ZWT = ZW ! ! Intermediate guesses inside the RK loop ! - ZUT(:,:,:) = ZU(:,:,:) + ZBUT(JS,JI) * PTSTEP * & - ( ZRUS(:,:,:,JI) + PRUS_OTHER(:,:,:) ) / PMXM_RHODJ - ZVT(:,:,:) = ZV(:,:,:) + ZBUT(JS,JI) * PTSTEP * & - ( ZRVS(:,:,:,JI) + PRVS_OTHER(:,:,:) ) / PMYM_RHODJ - ZWT(:,:,:) = ZW(:,:,:) + ZBUT(JS,JI) * PTSTEP * & - ( ZRWS(:,:,:,JI) + PRWS_OTHER(:,:,:) ) / PMZM_RHODJ + ZUT(:,:,:) = ZUT(:,:,:) + ZBUT(JS,JI) * PTSTEP * & + ( ZRUS(:,:,:,JI) + PRUS_OTHER(:,:,:) ) / PMXM_RHODJ + ZVT(:,:,:) = ZVT(:,:,:) + ZBUT(JS,JI) * PTSTEP * & + ( ZRVS(:,:,:,JI) + PRVS_OTHER(:,:,:) ) / PMYM_RHODJ + ZWT(:,:,:) = ZWT(:,:,:) + ZBUT(JS,JI) * PTSTEP * & + ( ZRWS(:,:,:,JI) + PRWS_OTHER(:,:,:) ) / PMZM_RHODJ ! - END DO + END DO ! - ELSE + ELSE ! ! Guesses at the end of the RK loop ! - DO JI = 1, ISPL - PRUS_ADV(:,:,:) = PRUS_ADV(:,:,:) + ZBUTS(JI) * ZRUS(:,:,:,JI) - PRVS_ADV(:,:,:) = PRVS_ADV(:,:,:) + ZBUTS(JI) * ZRVS(:,:,:,JI) - PRWS_ADV(:,:,:) = PRWS_ADV(:,:,:) + ZBUTS(JI) * ZRWS(:,:,:,JI) - END DO + DO JI = 1, ISPL + PRUS_ADV(:,:,:) = PRUS_ADV(:,:,:) + ZBUTS(JI) * ZRUS(:,:,:,JI) + PRVS_ADV(:,:,:) = PRVS_ADV(:,:,:) + ZBUTS(JI) * ZRVS(:,:,:,JI) + PRWS_ADV(:,:,:) = PRWS_ADV(:,:,:) + ZBUTS(JI) * ZRWS(:,:,:,JI) + END DO ! - END IF + END IF ! ! End of the RK loop END DO - ! ! DEALLOCATE(ZBUT, ZBUTS, ZRUS, ZRVS, ZRWS) diff --git a/src/MNH/advecuvw_weno_k.f90 b/src/MNH/advecuvw_weno_k.f90 index edd695127..a28258d06 100644 --- a/src/MNH/advecuvw_weno_k.f90 +++ b/src/MNH/advecuvw_weno_k.f90 @@ -45,7 +45,10 @@ END MODULE MODI_ADVECUVW_WENO_K !! !! MODIFICATIONS !! ------------- -!! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test +!! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 tests +!! T.Lunet 02/10/2014: add get_halo for WENO 5 +!! suppress comment of NHALO=1 tests +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -64,6 +67,8 @@ USE MODI_ADVEC_WENO_K_2_AUX USE MODI_ADVEC_WENO_K_3_AUX ! USE MODD_CONF, ONLY : NHALO +USE MODE_MPPDB +USE MODI_GET_HALO ! IMPLICIT NONE ! @@ -78,7 +83,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRUCT ! contravariant REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVCT ! components REAL, DIMENSION(:,:,:), INTENT(IN) :: PRWCT ! of momentum ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT, PVT, PWT ! Variables at t +REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT, PVT, PWT ! Variables at t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS, PRVS, PRWS ! Source terms ! @@ -87,11 +92,15 @@ TYPE(HALO2LIST_ll), POINTER :: TPHALO2LIST ! list for diffusion !* 0.2 Declarations of local variables : ! TYPE(HALO2LIST_ll), POINTER :: TZHALO2_UT,TZHALO2_VT,TZHALO2_WT + +TYPE(LIST_ll), POINTER :: TZHALO2_ZMEAN +INTEGER :: IINFO_ll ! return code of parallel routine ! -REAL, DIMENSION(SIZE(PUT,1), SIZE(PUT,2), SIZE(PUT,3)) :: ZMEAN, ZWORK +REAL, DIMENSION(SIZE(PUT,1), SIZE(PUT,2), SIZE(PUT,3)) :: ZMEAN, ZWORK, DYM_ZMEAN ! INTEGER :: K_SCHEME INTEGER :: IKU +INTEGER :: IWORK ! !------------------------- ADVECTION OF MOMENTUM ------------------------------ ! @@ -101,11 +110,13 @@ TZHALO2_VT => TPHALO2LIST%NEXT ! 2nd add3dfield in model_n TZHALO2_WT => TPHALO2LIST%NEXT%NEXT ! 3rst add3dfield in model_n ! IKU=SIZE(PUT,3) +ZMEAN = 0.0 +ZWORK=0.0 ! ------------------------------------------------------- ! SELECT CASE(KWENO_ORDER) ! -CASE(1) +CASE(1) ! WENO 1 ! ! U component ! @@ -132,26 +143,18 @@ CASE(1) PRWS = PRWS - DZM(1,IKU,1,UP_WZ(PWT,MZF(1,IKU,1,PRWCT))) ! ! -CASE(3) +CASE(3) ! WENO 3 ! ! U component ! ZWORK = MXF(PRUCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2) PRUS = PRUS - DXM(ZMEAN) ! IF (.NOT.L2D) THEN ZWORK = MXM(PRVCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2) PRUS = PRUS - DYF(ZMEAN) END IF ! @@ -161,19 +164,11 @@ CASE(3) ! IF (.NOT.L2D) THEN ZWORK = MYM(PRUCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2) PRVS = PRVS - DXF(ZMEAN) ! ZWORK = MYF(PRVCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2) PRVS = PRVS - DYM(ZMEAN) ! PRVS = PRVS - DZF(1,IKU,1,WENO_K_2_MZ(PVT, MYM(PRWCT))) @@ -182,93 +177,75 @@ CASE(3) ! W component ! ZWORK = MZM(1,IKU,1,PRUCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2) PRWS = PRWS - DXF(ZMEAN) ! IF (.NOT.L2D) THEN ZWORK = MZM(1,IKU,1,PRVCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2) PRWS = PRWS - DYF(ZMEAN) END IF ! PRWS = PRWS - DZM(1,IKU,1,WENO_K_2_WZ(PWT,MZF(1,IKU,1,PRWCT))) ! ! -CASE(5) +CASE(5) ! WENO 5 ! ! U component ! ZWORK = MXF(PRUCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_3_UX(HLBCX, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_3_UX(HLBCX, PUT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_3_UX(HLBCX, PUT, ZWORK, ZMEAN) + CALL GET_HALO(ZMEAN)! Update HALO PRUS = PRUS - DXM(ZMEAN) -! - IF (.NOT.L2D) THEN - ZWORK = MXM(PRVCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_3_MY(HLBCY, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_3_MY(HLBCY, PUT, ZWORK, ZMEAN) -!!$ ENDIF - PRUS = PRUS - DYM(ZMEAN) +! + IF (.NOT.L2D) THEN! 3D Case + ZWORK = MXM(PRVCT) + CALL ADVEC_WENO_K_3_MY(HLBCY, PUT, ZWORK, ZMEAN) + CALL GET_HALO(ZMEAN)! Update HALO + PRUS = PRUS - DYF(ZMEAN) END IF ! - PRUS = PRUS - DZF(1,IKU,1,WENO_K_3_MZ(PUT, MXM(PRWCT))) + ZMEAN = WENO_K_3_MZ(PUT, MXM(PRWCT)) + CALL GET_HALO(ZMEAN)! Update HALO - maybe not necessary (T.Lunet) + PRUS = PRUS - DZF(1,IKU,1,ZMEAN) ! -! V component +! V component, only called in 3D case ! IF (.NOT.L2D) THEN +! ZWORK = MYM(PRUCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_3_MX(HLBCX, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_3_MX(HLBCX, PVT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_3_MX(HLBCX, PVT, ZWORK, ZMEAN) + CALL GET_HALO(ZMEAN)! Update HALO PRVS = PRVS - DXF(ZMEAN) -! +! ZWORK = MYF(PRVCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_3_VY(HLBCY, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_3_VY(HLBCY, PVT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_3_VY(HLBCY, PVT, ZWORK, ZMEAN) + CALL GET_HALO(ZMEAN)! Update HALO PRVS = PRVS - DYM(ZMEAN) ! - PRVS = PRVS - DZF(1,IKU,1,WENO_K_3_MZ(PVT, MYM(PRWCT))) + ZMEAN = WENO_K_3_MZ(PVT, MYM(PRWCT)) + CALL GET_HALO(ZMEAN)! Update HALO - maybe not necessary (T.Lunet) + PRVS = PRVS - DZF(1,IKU,1,ZMEAN) +! END IF ! ! W component ! ZWORK = MZM(1,IKU,1,PRUCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_3_MX(HLBCX, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_3_MX(HLBCX, PWT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_3_MX(HLBCX, PWT, ZWORK, ZMEAN) + CALL GET_HALO(ZMEAN)! Update HALO PRWS = PRWS - DXF(ZMEAN) ! - IF (.NOT.L2D) THEN + IF (.NOT.L2D) THEN! 3D Case ZWORK = MZM(1,IKU,1,PRVCT) -!!$ IF(NHALO == 1) THEN - CALL ADVEC_WENO_K_3_MY(HLBCY, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2) -!!$ ELSE -!!$ CALL ADVEC_WENO_K_3_MY(HLBCY, PWT, ZWORK, ZMEAN) -!!$ ENDIF + CALL ADVEC_WENO_K_3_MY(HLBCY, PWT, ZWORK, ZMEAN) + CALL GET_HALO(ZMEAN)! Update HALO PRWS = PRWS - DYF(ZMEAN) END IF ! - PRWS = PRWS - DZM(1,IKU,1,WENO_K_3_WZ(PWT,MZF(1,IKU,1,PRWCT))) + ZMEAN = WENO_K_3_WZ(PWT,MZF(1,IKU,1,PRWCT)) + CALL GET_HALO(ZMEAN)! Update HALO - maybe not necessary (T.Lunet) + PRWS = PRWS - DZM(1,IKU,1,ZMEAN) ! ! END SELECT diff --git a/src/MNH/anel_balancen.f90 b/src/MNH/anel_balancen.f90 index 6a5af2d52..8f5101d82 100644 --- a/src/MNH/anel_balancen.f90 +++ b/src/MNH/anel_balancen.f90 @@ -106,6 +106,7 @@ END MODULE MODI_ANEL_BALANCE_n !! J.Stein and J.P. lafore 17/04/96 new version including the way to choose !! the model number and the instant where the projection is performed !! Stein,Lafore 14/01/97 new anelastic equations +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -214,8 +215,6 @@ ALLOCATE(ZBF_SXP2_YP1_Z(IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll)) ! ! -!!$CALL TRID(CLUOUT0,CLBCX,CLBCY,XMAP,XDXHAT,XDYHAT,ZDXHATM,ZDYHATM,ZRHOM, & -!!$ ZAF,ZCF,ZTRIGSX,ZTRIGSY,IIFAXX,IIFAXY,XRHODJ,XTHVREF,XZZ,ZBFY ) CALL TRIDZ(CLUOUT0,CLBCX,CLBCY,XMAP,XDXHAT,XDYHAT,ZDXHATM,ZDYHATM,ZRHOM, & ZAF,ZCF,ZTRIGSX,ZTRIGSY,IIFAXX,IIFAXY,XRHODJ,XTHVREF,XZZ,ZBFY,& ZBFB,ZBF_SXP2_YP1_Z) diff --git a/src/MNH/bikhardt.f90 b/src/MNH/bikhardt.f90 index 96f6db55d..599f52176 100644 --- a/src/MNH/bikhardt.f90 +++ b/src/MNH/bikhardt.f90 @@ -170,6 +170,7 @@ END MODULE MODI_BIKHARDT4D !! J.P. Lafore 22/10/96 interpolation coefficients added to the arguments !! list to avoid duplication. !! V. Masson and F. Gheusi (10/10/97) bug in cyclic case +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -212,8 +213,8 @@ REAL :: ZBFY1,ZBFY2,ZBFY3,ZBFY4 ! at Flux points in Y-direc. ! INTEGER :: IIU ! Upper dimension in x direction (inner model) INTEGER :: IJU ! Upper dimension in y direction (inner model) -INTEGER :: IIB -INTEGER :: IJB +INTEGER :: IIB, IIE +INTEGER :: IJB, IJE INTEGER :: IIU1 ! Upper dimension in x direction (outer model) INTEGER :: IJU1 ! Upper dimension in y direction (outer model) INTEGER :: IIS,IJS ! indices I and J in x and y dir. for scalars @@ -231,8 +232,7 @@ IIU = SIZE(PFIELD2,1) IJU = SIZE(PFIELD2,2) IIU1= SIZE(PFIELD1,1) IJU1= SIZE(PFIELD1,2) -IIB = 1+JPHEXT -IJB = 1+JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! !* 1.2 extrapolates field of outer model ! @@ -268,6 +268,7 @@ IF ( HLBCY(1) == 'CYCL' ) THEN END IF !------------------------------------------------------------------------------- ! +PFIELD2 = 0.0 SELECT CASE (KGRID) ! !* 2.1 Mass points @@ -285,11 +286,11 @@ SELECT CASE (KGRID) ZBMY3 = PBMY3(JEPSY) ZBMY4 = PBMY4(JEPSY) DO JI = KXOR,KXEND - IIF = IIB+JEPSX-1 +(JI-KXOR-1)*KDXRATIO - IIS = IIB+JEPSX-1+KDXRATIO/2+(JI-KXOR-1)*KDXRATIO +!!$ IIF = IIB+JEPSX-1 +(JI-KXOR-JPHEXT)*KDXRATIO + IIS = IIB+JEPSX-1+KDXRATIO/2+(JI-KXOR-JPHEXT)*KDXRATIO DO JJ = KYOR,KYEND - IJF = IJB+JEPSY-1 +(JJ-KYOR-1)*KDYRATIO - IJS = IJB+JEPSY-1+KDYRATIO/2+(JJ-KYOR-1)*KDYRATIO +!!$ IJF = IJB+JEPSY-1 +(JJ-KYOR-JPHEXT)*KDYRATIO + IJS = IJB+JEPSY-1+KDYRATIO/2+(JJ-KYOR-JPHEXT)*KDYRATIO ! IF (1 <= IIS .AND. IIS <= IIU .AND. 1 <= IJS .AND. IJS <= IJU) THEN ! @@ -326,9 +327,9 @@ SELECT CASE (KGRID) ZBMY3 = PBMY3(JEPSY) ZBMY4 = PBMY4(JEPSY) DO JI = KXOR,KXEND - IIF = IIB+JEPSX-1 +(JI-KXOR-1)*KDXRATIO + IIF = IIB+JEPSX-1 +(JI-KXOR-JPHEXT)*KDXRATIO DO JJ = KYOR,KYEND - IJS = IJB+JEPSY-1+KDYRATIO/2+(JJ-KYOR-1)*KDYRATIO + IJS = IJB+JEPSY-1+KDYRATIO/2+(JJ-KYOR-JPHEXT)*KDYRATIO IF (1 <= IIF .AND. IIF <= IIU .AND. 1 <= IJS .AND. IJS <= IJU) THEN ! @@ -365,9 +366,9 @@ SELECT CASE (KGRID) ZBFY3 = PBFY3(JEPSY) ZBFY4 = PBFY4(JEPSY) DO JI = KXOR,KXEND - IIS = IIB+JEPSX-1+KDXRATIO/2+(JI-KXOR-1)*KDXRATIO + IIS = IIB+JEPSX-1+KDXRATIO/2+(JI-KXOR-JPHEXT)*KDXRATIO DO JJ = KYOR,KYEND - IJF = IJB+JEPSY-1 +(JJ-KYOR-1)*KDYRATIO + IJF = IJB+JEPSY-1 +(JJ-KYOR-JPHEXT)*KDYRATIO IF (1 <= IIS .AND. IIS <= IIU .AND. 1 <= IJF .AND. IJF <= IJU) THEN ! @@ -405,9 +406,9 @@ SELECT CASE (KGRID) ZBFY3 = PBFY3(JEPSY) ZBFY4 = PBFY4(JEPSY) DO JI = KXOR,KXEND - IIF = IIB+JEPSX-1 +(JI-KXOR-1)*KDXRATIO + IIF = IIB+JEPSX-1 +(JI-KXOR-JPHEXT)*KDXRATIO DO JJ = KYOR,KYEND - IJF = IJB+JEPSY-1 +(JJ-KYOR-1)*KDYRATIO + IJF = IJB+JEPSY-1 +(JJ-KYOR-JPHEXT)*KDYRATIO IF (1 <= IIF .AND. IIF <= IIU .AND. 1 <= IJF .AND. IJF <= IJU) THEN ! diff --git a/src/MNH/boundaries.f90 b/src/MNH/boundaries.f90 index cf439c42f..0bfc56d0a 100644 --- a/src/MNH/boundaries.f90 +++ b/src/MNH/boundaries.f90 @@ -169,6 +169,7 @@ END MODULE MODI_BOUNDARIES !! Modification 04/2013 (C.Lac) Remove instant M !! Modification 01/2015 (JL Redelsperger) Introduction of ponderation !! for non normal velocity and potential temp +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -292,6 +293,8 @@ LOGICAL, SAVE :: GFIRSTCALLFF = .TRUE. LOGICAL :: GFFTMP #endif ! +INTEGER :: JI,JJ +! !------------------------------------------------------------------------------- ! !* 1. COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES: @@ -471,26 +474,30 @@ SELECT CASE ( HLBCX(1) ) CASE ('OPEN') ! IF(SIZE(PUT) /= 0) THEN - PUT(IIB-JPHEXT,:,:)=0. - WHERE ( PUT(IIB,:,:) <= 0. ) ! OUTFLOW condition - PVT (IIB-1,:,:) = 2.*PVT (IIB,:,:) -PVT (IIB+1,:,:) - PWT (IIB-1,:,:) = 2.*PWT (IIB,:,:) -PWT (IIB+1,:,:) - PTHT (IIB-1,:,:) = 2.*PTHT (IIB,:,:) -PTHT (IIB+1,:,:) -! - ELSEWHERE ! INFLOW condition - PVT (IIB-1,:,:) = ZPOND*ZLBXVT (1,:,:) + (1.-ZPOND)* PVT(IIB,:,:) - PWT (IIB-1,:,:) = ZPOND*ZLBXWT (1,:,:) + (1.-ZPOND)* PWT(IIB,:,:) - PTHT (IIB-1,:,:) = ZPOND*ZLBXTHT (1,:,:) + (1.-ZPOND)* PTHT(IIB,:,:) - ENDWHERE + DO JI=JPHEXT,1,-1 + PUT(JI,:,:)=0. + WHERE ( PUT(IIB,:,:) <= 0. ) ! OUTFLOW condition + PVT (JI,:,:) = 2.*PVT (JI+1,:,:) -PVT (JI+2,:,:) + PWT (JI,:,:) = 2.*PWT (JI+1,:,:) -PWT (JI+2,:,:) + PTHT (JI,:,:) = 2.*PTHT (JI+1,:,:) -PTHT (JI+2,:,:) + ! + ELSEWHERE ! INFLOW condition + PVT (JI,:,:) = ZPOND*ZLBXVT (JI,:,:) + (1.-ZPOND)* PVT(JI+1,:,:) ! 1 + PWT (JI,:,:) = ZPOND*ZLBXWT (JI,:,:) + (1.-ZPOND)* PWT(JI+1,:,:) ! 1 + PTHT (JI,:,:) = ZPOND*ZLBXTHT (JI,:,:) + (1.-ZPOND)* PTHT(JI+1,:,:)! 1 + ENDWHERE + ENDDO ENDIF ! ! IF(SIZE(PTKET) /= 0) THEN - WHERE ( PUT(IIB,:,:) <= 0. ) ! OUTFLOW condition - PTKET(IIB-1,:,:) = MAX(XTKEMIN, 2.*PTKET(IIB,:,:)-PTKET(IIB+1,:,:)) - ELSEWHERE ! INFLOW condition - PTKET(IIB-1,:,:) = MAX(XTKEMIN,ZLBXTKET(1,:,:)) - ENDWHERE + DO JI=JPHEXT,1,-1 + WHERE ( PUT(IIB,:,:) <= 0. ) ! OUTFLOW condition + PTKET(JI,:,:) = MAX(XTKEMIN, 2.*PTKET(JI+1,:,:)-PTKET(JI+2,:,:)) + ELSEWHERE ! INFLOW condition + PTKET(JI,:,:) = MAX(XTKEMIN,ZLBXTKET(JI,:,:)) ! 1 + ENDWHERE + ENDDO END IF ! ! Case with KRR moist variables @@ -498,27 +505,35 @@ SELECT CASE ( HLBCX(1) ) ! ! DO JRR =1 ,KRR - IF(SIZE(PUT) /= 0) THEN - WHERE ( PUT(IIB,:,:) <= 0. ) ! OUTFLOW condition - PRT(IIB-1,:,:,JRR) = MAX(0.,2.*PRT(IIB,:,:,JRR) -PRT(IIB+1,:,:,JRR)) - ELSEWHERE ! INFLOW condition - PRT(IIB-1,:,:,JRR) = MAX(0.,ZLBXRT(1,:,:,JRR)) - END WHERE - END IF - ! + IF(SIZE(PUT) /= 0) THEN + DO JI=JPHEXT,1,-1 + WHERE ( PUT(IIB,:,:) <= 0. ) ! OUTFLOW condition + PRT(JI,:,:,JRR) = MAX(0.,2.*PRT(JI+1,:,:,JRR) -PRT(JI+2,:,:,JRR)) + ELSEWHERE ! INFLOW condition + PRT(JI,:,:,JRR) = MAX(0.,ZLBXRT(JI,:,:,JRR)) ! 1 + END WHERE + END DO + END IF + ! END DO ! - IF(SIZE(PSRCT) /= 0) PSRCT (IIB-1,:,:) = PSRCT (IIB,:,:) + IF(SIZE(PSRCT) /= 0) THEN + DO JI=JPHEXT,1,-1 + PSRCT (JI,:,:) = PSRCT (JI+1,:,:) + END DO + END IF ! ! Case with KSV scalar variables DO JSV=1 ,KSV IF(SIZE(PUT) /= 0) THEN - WHERE ( PUT(IIB,:,:) <= 0. ) ! OUTFLOW condition - PSVT(IIB-1,:,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(IIB,:,:,JSV) - & - PSVT(IIB+1,:,:,JSV)) - ELSEWHERE ! INFLOW condition - PSVT(IIB-1,:,:,JSV) = MAX(XSVMIN(JSV),ZLBXSVT(1,:,:,JSV)) - END WHERE + DO JI=JPHEXT,1,-1 + WHERE ( PUT(IIB,:,:) <= 0. ) ! OUTFLOW condition + PSVT(JI,:,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(JI+1,:,:,JSV) - & + PSVT(JI+2,:,:,JSV)) + ELSEWHERE ! INFLOW condition + PSVT(JI,:,:,JSV) = MAX(XSVMIN(JSV),ZLBXSVT(JI,:,:,JSV)) ! 1 + END WHERE + END DO END IF ! END DO @@ -560,28 +575,32 @@ SELECT CASE ( HLBCX(2) ) ! CASE ('OPEN') ! - ILBX = SIZE(PLBXVM,1) - IF(SIZE(PUT) /= 0) THEN - WHERE ( PUT(IIE+1,:,:) >= 0. ) ! OUTFLOW condition - PVT (IIE+1,:,:) = 2.*PVT (IIE,:,:) -PVT (IIE-1,:,:) - PWT (IIE+1,:,:) = 2.*PWT (IIE,:,:) -PWT (IIE-1,:,:) - PTHT (IIE+1,:,:) = 2.*PTHT (IIE,:,:) -PTHT (IIE-1,:,:) -! - ELSEWHERE ! INFLOW condition - PVT (IIE+1,:,:) = ZPOND*ZLBXVT (ILBX,:,:) + (1.-ZPOND)* PVT(IIE,:,:) - PWT (IIE+1,:,:) = ZPOND*ZLBXWT (ILBX,:,:) + (1.-ZPOND)* PWT(IIE,:,:) - PTHT (IIE+1,:,:) = ZPOND*ZLBXTHT (ILBX,:,:) + (1.-ZPOND)* PTHT(IIE,:,:) - ENDWHERE - ENDIF -! - IF(SIZE(PTKET) /= 0) THEN - ILBX = SIZE(PLBXTKEM,1) - WHERE ( PUT(IIE+1,:,:) >= 0. ) ! OUTFLOW condition - PTKET(IIE+1,:,:) = MAX(XTKEMIN, 2.*PTKET(IIE,:,:)-PTKET(IIE-1,:,:)) - ELSEWHERE ! INFLOW condition - PTKET(IIE+1,:,:) = MAX(XTKEMIN,ZLBXTKET(ILBX,:,:)) - ENDWHERE - END IF + ILBX = SIZE(PLBXVM,1) + IF(SIZE(PUT) /= 0) THEN + DO JI=1,JPHEXT + WHERE ( PUT(IIE+1,:,:) >= 0. ) ! OUTFLOW condition + PVT (IIE+JI,:,:) = 2.*PVT (IIE+JI-1,:,:) -PVT (IIE+JI-2,:,:) + PWT (IIE+JI,:,:) = 2.*PWT (IIE+JI-1,:,:) -PWT (IIE+JI-2,:,:) + PTHT (IIE+JI,:,:) = 2.*PTHT (IIE+JI-1,:,:) -PTHT (IIE+JI-2,:,:) + ! + ELSEWHERE ! INFLOW condition + PVT (IIE+JI,:,:) = ZPOND*ZLBXVT (ILBX-JPHEXT+JI,:,:) + (1.-ZPOND)* PVT(IIE+JI-1,:,:) + PWT (IIE+JI,:,:) = ZPOND*ZLBXWT (ILBX-JPHEXT+JI,:,:) + (1.-ZPOND)* PWT(IIE+JI-1,:,:) + PTHT (IIE+JI,:,:) = ZPOND*ZLBXTHT (ILBX-JPHEXT+JI,:,:) + (1.-ZPOND)* PTHT(IIE+JI-1,:,:) + ENDWHERE + END DO + ENDIF + ! + IF(SIZE(PTKET) /= 0) THEN + ILBX = SIZE(PLBXTKEM,1) + DO JI=1,JPHEXT + WHERE ( PUT(IIE+1,:,:) >= 0. ) ! OUTFLOW condition + PTKET(IIE+JI,:,:) = MAX(XTKEMIN, 2.*PTKET(IIE+JI-1,:,:)-PTKET(IIE+JI-2,:,:)) + ELSEWHERE ! INFLOW condition + PTKET(IIE+JI,:,:) = MAX(XTKEMIN,ZLBXTKET(ILBX-JPHEXT+JI,:,:)) + ENDWHERE + END DO + END IF ! ! ! Case with KRR moist variables @@ -591,26 +610,34 @@ SELECT CASE ( HLBCX(2) ) ILBX=SIZE(PLBXRM,1) ! IF(SIZE(PUT) /= 0) THEN - WHERE ( PUT(IIE+1,:,:) >= 0. ) ! OUTFLOW condition - PRT(IIE+1,:,:,JRR) = MAX(0.,2.*PRT(IIE,:,:,JRR) -PRT(IIE-1,:,:,JRR)) - ELSEWHERE ! INFLOW condition - PRT(IIE+1,:,:,JRR) = MAX(0.,ZLBXRT(ILBX,:,:,JRR)) - END WHERE + DO JI=1,JPHEXT + WHERE ( PUT(IIE+1,:,:) >= 0. ) ! OUTFLOW condition + PRT(IIE+JI,:,:,JRR) = MAX(0.,2.*PRT(IIE+JI-1,:,:,JRR) -PRT(IIE+JI-2,:,:,JRR)) + ELSEWHERE ! INFLOW condition + PRT(IIE+JI,:,:,JRR) = MAX(0.,ZLBXRT(ILBX-JPHEXT+JI,:,:,JRR)) + END WHERE + END DO END IF ! END DO ! - IF(SIZE(PSRCT) /= 0) PSRCT (IIE+1,:,:) = PSRCT (IIE,:,:) + IF(SIZE(PSRCT) /= 0) THEN + DO JI=1,JPHEXT + PSRCT (IIE+JI,:,:) = PSRCT (IIE+JI-1,:,:) + END DO + END IF ! Case with KSV scalar variables DO JSV=1 ,KSV ILBX=SIZE(PLBXSVM,1) IF(SIZE(PUT) /= 0) THEN - WHERE ( PUT(IIE+1,:,:) >= 0. ) ! OUTFLOW condition - PSVT(IIE+1,:,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(IIE,:,:,JSV) - & - PSVT(IIE-1,:,:,JSV)) - ELSEWHERE ! INFLOW condition - PSVT(IIE+1,:,:,JSV) = MAX(XSVMIN(JSV),ZLBXSVT(ILBX,:,:,JSV)) - END WHERE + DO JI=1,JPHEXT + WHERE ( PUT(IIE+1,:,:) >= 0. ) ! OUTFLOW condition + PSVT(IIE+JI,:,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(IIE+JI-1,:,:,JSV) - & + PSVT(IIE+JI-2,:,:,JSV)) + ELSEWHERE ! INFLOW condition + PSVT(IIE+JI,:,:,JSV) = MAX(XSVMIN(JSV),ZLBXSVT(ILBX-JPHEXT+JI,:,:,JSV)) + END WHERE + END DO END IF ! END DO @@ -652,24 +679,28 @@ SELECT CASE ( HLBCY(1) ) CASE ('OPEN') ! IF(SIZE(PVT) /= 0) THEN - PVT(:,IJB-JPHEXT,:)=0. - WHERE ( PVT(:,IJB,:) <= 0. ) ! OUTFLOW condition - PUT (:,IJB-1,:) = 2.*PUT (:,IJB,:) -PUT (:,IJB+1,:) - PWT (:,IJB-1,:) = 2.*PWT (:,IJB,:) -PWT (:,IJB+1,:) - PTHT (:,IJB-1,:) = 2.*PTHT (:,IJB,:) -PTHT (:,IJB+1,:) - ELSEWHERE ! INFLOW condition - PUT (:,IJB-1,:) = ZPOND*ZLBYUT (:,1,:) + (1.-ZPOND)* PUT(:,IJB,:) - PWT (:,IJB-1,:) = ZPOND*ZLBYWT (:,1,:) + (1.-ZPOND)* PWT(:,IJB,:) - PTHT (:,IJB-1,:) = ZPOND*ZLBYTHT (:,1,:) + (1.-ZPOND)* PTHT(:,IJB,:) - ENDWHERE + DO JJ=JPHEXT,1,-1 + PVT(:,JJ,:)=0. + WHERE ( PVT(:,IJB,:) <= 0. ) ! OUTFLOW condition + PUT (:,JJ,:) = 2.*PUT (:,JJ+1,:) -PUT (:,JJ+2,:) + PWT (:,JJ,:) = 2.*PWT (:,JJ+1,:) -PWT (:,JJ+2,:) + PTHT (:,JJ,:) = 2.*PTHT (:,JJ+1,:) -PTHT (:,JJ+2,:) + ELSEWHERE ! INFLOW condition + PUT (:,JJ,:) = ZPOND*ZLBYUT (:,JJ,:) + (1.-ZPOND)* PUT(:,JJ+1,:) + PWT (:,JJ,:) = ZPOND*ZLBYWT (:,JJ,:) + (1.-ZPOND)* PWT(:,JJ+1,:) + PTHT (:,JJ,:) = ZPOND*ZLBYTHT (:,JJ,:) + (1.-ZPOND)* PTHT(:,JJ+1,:) + ENDWHERE + END DO ENDIF ! IF(SIZE(PTKET) /= 0) THEN - WHERE ( PVT(:,IJB,:) <= 0. ) ! OUTFLOW condition - PTKET(:,IJB-1,:) = MAX(XTKEMIN, 2.*PTKET(:,IJB,:)-PTKET(:,IJB+1,:)) - ELSEWHERE ! INFLOW condition - PTKET(:,IJB-1,:) = MAX(XTKEMIN,ZLBYTKET(:,1,:)) - ENDWHERE + DO JJ=JPHEXT,1,-1 + WHERE ( PVT(:,IJB,:) <= 0. ) ! OUTFLOW condition + PTKET(:,JJ,:) = MAX(XTKEMIN, 2.*PTKET(:,JJ+1,:)-PTKET(:,JJ+2,:)) + ELSEWHERE ! INFLOW condition + PTKET(:,JJ,:) = MAX(XTKEMIN,ZLBYTKET(:,JJ,:)) + ENDWHERE + END DO END IF ! ! @@ -678,27 +709,35 @@ SELECT CASE ( HLBCY(1) ) ! DO JRR =1 ,KRR IF(SIZE(PVT) /= 0) THEN - WHERE ( PVT(:,IJB,:) <= 0. ) ! OUTFLOW condition - PRT(:,IJB-1,:,JRR) = MAX(0.,2.*PRT(:,IJB,:,JRR) -PRT(:,IJB+1,:,JRR)) - ELSEWHERE ! INFLOW condition - PRT(:,IJB-1,:,JRR) = MAX(0.,ZLBYRT(:,1,:,JRR)) - END WHERE + DO JJ=JPHEXT,1,-1 + WHERE ( PVT(:,IJB,:) <= 0. ) ! OUTFLOW condition + PRT(:,JJ,:,JRR) = MAX(0.,2.*PRT(:,JJ+1,:,JRR) -PRT(:,JJ+2,:,JRR)) + ELSEWHERE ! INFLOW condition + PRT(:,JJ,:,JRR) = MAX(0.,ZLBYRT(:,JJ,:,JRR)) + END WHERE + END DO END IF ! END DO ! - IF(SIZE(PSRCT) /= 0) PSRCT(:,IJB-1,:) = PSRCT(:,IJB,:) + IF(SIZE(PSRCT) /= 0) THEN + DO JJ=JPHEXT,1,-1 + PSRCT(:,JJ,:) = PSRCT(:,JJ+1,:) + END DO + END IF ! ! Case with KSV scalar variables ! DO JSV=1 ,KSV IF(SIZE(PVT) /= 0) THEN - WHERE ( PVT(:,IJB,:) <= 0. ) ! OUTFLOW condition - PSVT(:,IJB-1,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(:,IJB,:,JSV) - & - PSVT(:,IJB+1,:,JSV)) - ELSEWHERE ! INFLOW condition - PSVT(:,IJB-1,:,JSV) = MAX(XSVMIN(JSV),ZLBYSVT(:,1,:,JSV)) - END WHERE + DO JJ=JPHEXT,1,-1 + WHERE ( PVT(:,IJB,:) <= 0. ) ! OUTFLOW condition + PSVT(:,JJ,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(:,JJ+1,:,JSV) - & + PSVT(:,JJ+2,:,JSV)) + ELSEWHERE ! INFLOW condition + PSVT(:,JJ,:,JSV) = MAX(XSVMIN(JSV),ZLBYSVT(:,JJ,:,JSV)) + END WHERE + END DO END IF ! END DO @@ -743,24 +782,28 @@ SELECT CASE ( HLBCY(2) ) ! ILBY=SIZE(PLBYUM,2) IF(SIZE(PVT) /= 0) THEN - WHERE ( PVT(:,IJE+1,:) >= 0. ) ! OUTFLOW condition - PUT (:,IJE+1,:) = 2.*PUT (:,IJE,:) -PUT (:,IJE-1,:) - PWT (:,IJE+1,:) = 2.*PWT (:,IJE,:) -PWT (:,IJE-1,:) - PTHT (:,IJE+1,:) = 2.*PTHT (:,IJE,:) -PTHT (:,IJE-1,:) - ELSEWHERE ! INFLOW condition - PUT (:,IJE+1,:) = ZPOND*ZLBYUT (:,ILBY,:) + (1.-ZPOND)* PUT(:,IJE,:) - PWT (:,IJE+1,:) = ZPOND*ZLBYWT (:,ILBY,:) + (1.-ZPOND)* PWT(:,IJE,:) - PTHT (:,IJE+1,:) = ZPOND*ZLBYTHT (:,ILBY,:) + (1.-ZPOND)* PTHT(:,IJE,:) - ENDWHERE + DO JJ=1,JPHEXT + WHERE ( PVT(:,IJE+1,:) >= 0. ) ! OUTFLOW condition + PUT (:,IJE+JJ,:) = 2.*PUT (:,IJE+JJ-1,:) -PUT (:,IJE+JJ-2,:) + PWT (:,IJE+JJ,:) = 2.*PWT (:,IJE+JJ-1,:) -PWT (:,IJE+JJ-2,:) + PTHT (:,IJE+JJ,:) = 2.*PTHT (:,IJE+JJ-1,:) -PTHT (:,IJE+JJ-2,:) + ELSEWHERE ! INFLOW condition + PUT (:,IJE+JJ,:) = ZPOND*ZLBYUT (:,ILBY-JPHEXT+JJ,:) + (1.-ZPOND)* PUT(:,IJE+JJ-1,:) + PWT (:,IJE+JJ,:) = ZPOND*ZLBYWT (:,ILBY-JPHEXT+JJ,:) + (1.-ZPOND)* PWT(:,IJE+JJ-1,:) + PTHT (:,IJE+JJ,:) = ZPOND*ZLBYTHT (:,ILBY-JPHEXT+JJ,:) + (1.-ZPOND)* PTHT(:,IJE+JJ-1,:) + ENDWHERE + END DO ENDIF ! IF(SIZE(PTKET) /= 0) THEN ILBY=SIZE(PLBYTKEM,2) - WHERE ( PVT(:,IJE+1,:) >= 0. ) ! OUTFLOW condition - PTKET(:,IJE+1,:) = MAX(XTKEMIN, 2.*PTKET(:,IJE,:)-PTKET(:,IJE-1,:)) - ELSEWHERE ! INFLOW condition - PTKET(:,IJE+1,:) = MAX(XTKEMIN,ZLBYTKET(:,ILBY,:)) - ENDWHERE + DO JJ=1,JPHEXT + WHERE ( PVT(:,IJE+1,:) >= 0. ) ! OUTFLOW condition + PTKET(:,IJE+JJ,:) = MAX(XTKEMIN, 2.*PTKET(:,IJE+JJ-1,:)-PTKET(:,IJE+JJ-2,:)) + ELSEWHERE ! INFLOW condition + PTKET(:,IJE+JJ,:) = MAX(XTKEMIN,ZLBYTKET(:,ILBY-JPHEXT+JJ,:)) + ENDWHERE + END DO ENDIF ! ! Case with KRR moist variables @@ -770,28 +813,36 @@ SELECT CASE ( HLBCY(2) ) ILBY=SIZE(PLBYRM,2) ! IF(SIZE(PVT) /= 0) THEN - WHERE ( PVT(:,IJE+1,:) >= 0. ) ! OUTFLOW condition - PRT(:,IJE+1,:,JRR) = MAX(0.,2.*PRT(:,IJE,:,JRR) -PRT(:,IJE-1,:,JRR)) - ELSEWHERE ! INFLOW condition - PRT(:,IJE+1,:,JRR) = MAX(0.,ZLBYRT(:,ILBY,:,JRR)) - END WHERE + DO JJ=1,JPHEXT + WHERE ( PVT(:,IJE+1,:) >= 0. ) ! OUTFLOW condition + PRT(:,IJE+JJ,:,JRR) = MAX(0.,2.*PRT(:,IJE+JJ-1,:,JRR) -PRT(:,IJE+JJ-2,:,JRR)) + ELSEWHERE ! INFLOW condition + PRT(:,IJE+JJ,:,JRR) = MAX(0.,ZLBYRT(:,ILBY-JPHEXT+JJ,:,JRR)) + END WHERE + END DO END IF ! END DO ! - IF(SIZE(PSRCT) /= 0) PSRCT(:,IJE+1,:) = PSRCT(:,IJE,:) + IF(SIZE(PSRCT) /= 0) THEN + DO JJ=1,JPHEXT + PSRCT(:,IJE+JJ,:) = PSRCT(:,IJE+JJ-1,:) + END DO + END IF ! ! Case with KSV scalar variables DO JSV=1 ,KSV ILBY=SIZE(PLBYSVM,2) ! IF(SIZE(PVT) /= 0) THEN - WHERE ( PVT(:,IJE+1,:) >= 0. ) ! OUTFLOW condition - PSVT(:,IJE+1,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(:,IJE,:,JSV) - & - PSVT(:,IJE-1,:,JSV)) - ELSEWHERE ! INFLOW condition - PSVT(:,IJE+1,:,JSV) = MAX(XSVMIN(JSV),ZLBYSVT(:,ILBY,:,JSV)) - END WHERE + DO JJ=1,JPHEXT + WHERE ( PVT(:,IJE+1,:) >= 0. ) ! OUTFLOW condition + PSVT(:,IJE+JJ,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(:,IJE+JJ-1,:,JSV) - & + PSVT(:,IJE+JJ-2,:,JSV)) + ELSEWHERE ! INFLOW condition + PSVT(:,IJE+JJ,:,JSV) = MAX(XSVMIN(JSV),ZLBYSVT(:,ILBY-JPHEXT+JJ,:,JSV)) + END WHERE + END DO END IF ! END DO @@ -807,10 +858,10 @@ IF (LUSECHEM .AND. IMI == 1) THEN GFIRSTCALL1 = .FALSE. DO JSV=NSV_CHEMBEG,NSV_CHEMEND GCHTMP = .FALSE. - IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0) - IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0) - IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0) - IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0) + IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0) + IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0) + IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0) + IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0) GCHBOUNDARY(JSV-NSV_CHEMBEG+1) = GCHTMP ENDDO ENDIF @@ -830,10 +881,10 @@ IF (LUSECHIC .AND. IMI == 1) THEN GFIRSTCALLIC = .FALSE. DO JSV=NSV_CHICBEG,NSV_CHICEND GCHTMP = .FALSE. - IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0) - IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0) - IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0) - IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0) + IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0) + IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0) + IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0) + IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0) GICBOUNDARY(JSV-NSV_CHICBEG+1) = GCHTMP ENDDO ENDIF @@ -852,10 +903,10 @@ IF (LORILAM .AND. IMI == 1) THEN GFIRSTCALL2 = .FALSE. DO JSV=NSV_AERBEG,NSV_AEREND GCHTMP = .FALSE. - IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0) - IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0) - IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0) - IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0) + IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0) + IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0) + IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0) + IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0) GAERBOUNDARY(JSV-NSV_AERBEG+1) = GCHTMP ENDDO ENDIF @@ -875,10 +926,10 @@ IF (LDUST .AND. IMI == 1) THEN GFIRSTCALL3 = .FALSE. DO JSV=NSV_DSTBEG,NSV_DSTEND GCHTMP = .FALSE. - IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0) - IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0) - IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0) - IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0) + IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0) + IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0) + IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0) + IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0) GDSTBOUNDARY(JSV-NSV_DSTBEG+1) = GCHTMP ENDDO ENDIF @@ -898,10 +949,10 @@ IF (LSALT .AND. IMI == 1) THEN GFIRSTCALL5 = .FALSE. DO JSV=NSV_SLTBEG,NSV_SLTEND GCHTMP = .FALSE. - IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0) - IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0) - IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0) - IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0) + IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0) + IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0) + IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0) + IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0) GSLTBOUNDARY(JSV-NSV_SLTBEG+1) = GCHTMP ENDDO ENDIF @@ -921,10 +972,10 @@ IF ( LPASPOL .AND. IMI == 1) THEN GFIRSTCALLPP = .FALSE. DO JSV=NSV_PPBEG,NSV_PPEND GPPTMP = .FALSE. - IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0) - IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0) - IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0) - IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0) + IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0) + IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0) + IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0) + IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0) GPPBOUNDARY(JSV-NSV_PPBEG+1) = GPPTMP ENDDO ENDIF @@ -944,10 +995,10 @@ IF ( LCONDSAMP .AND. IMI == 1) THEN GFIRSTCALLCS = .FALSE. DO JSV=NSV_CSBEG,NSV_CSEND GCSTMP = .FALSE. - IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0) - IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0) - IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0) - IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0) + IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0) + IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0) + IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0) + IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0) GCSBOUNDARY(JSV-NSV_CSBEG+1) = GCSTMP ENDDO ENDIF @@ -968,10 +1019,10 @@ IF ( LFOREFIRE .AND. IMI == 1) THEN GFIRSTCALLFF = .FALSE. DO JSV=NSV_FFBEG,NSV_FFEND GFFTMP = .FALSE. - IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0) - IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0) - IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0) - IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0) + IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0) + IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0) + IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0) + IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0) GFFBOUNDARY(JSV-NSV_FFBEG+1) = GFFTMP ENDDO ENDIF diff --git a/src/MNH/budget.f90 b/src/MNH/budget.f90 index 3dee913e1..bed79a905 100644 --- a/src/MNH/budget.f90 +++ b/src/MNH/budget.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 budget 2006/05/18 13:07:25 !----------------------------------------------------------------- !################## MODULE MODI_BUDGET @@ -80,6 +79,7 @@ END MODULE MODI_BUDGET !! J. Stein 26/06/96 add the 'OF','NO' option !! J.-P. Pinty 12/12/96 simplifies the coding !! V. Masson 06/10/02 add LES budgets +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -131,6 +131,7 @@ REAL :: XPRECISION ! for reproductibility checks ! XPRECISION = 1E-10 IF (LCHECK) THEN + print*,'BUDGET :',HBUVAR CALL MPPDB_CHECK3D(PVARS,HBUVAR,XPRECISION) END IF ! diff --git a/src/MNH/call_rttov.f90 b/src/MNH/call_rttov.f90 index cecc4d89a..4a8f5b007 100644 --- a/src/MNH/call_rttov.f90 +++ b/src/MNH/call_rttov.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG3 2007/11/20 12:25:23 !----------------------------------------------------------------- ! ###################### MODULE MODI_CALL_RTTOV @@ -85,6 +84,7 @@ SUBROUTINE CALL_RTTOV(KDLON, KFLEV, KSTATM, PEMIS, PTSRAD, PSTATM, & !! Original 11/12/03 !! JP Chaboureau 27/03/2008 Vectorization !! JP Chaboureau 02/11/2009 move GANGL deallocation outside the sensor loop +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !!---------------------------------------------------------------------------- !! !!* 0. DECLARATIONS @@ -749,11 +749,8 @@ PRINT *,' RADIANCE OR TB CALCULATION: INRAD=',INRAD,' switchrad=',switchrad IIU = SIZE(PTHT,1) IJU = SIZE(PTHT,2) IKU = SIZE(PTHT,3) -IIB = 1 + JPHEXT -IJB = 1 + JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT -IIE = IIU - JPHEXT -IJE = IJU - JPHEXT IKE = IKU - JPVEXT IKR = IKE - IKB +1 diff --git a/src/MNH/ch_aqueous_sedim1mom.f90 b/src/MNH/ch_aqueous_sedim1mom.f90 index 98203c122..c9683e263 100644 --- a/src/MNH/ch_aqueous_sedim1mom.f90 +++ b/src/MNH/ch_aqueous_sedim1mom.f90 @@ -76,6 +76,7 @@ END MODULE MODI_CH_AQUEOUS_SEDIM1MOM !! Original 22/07/07 !! 04/11/08 (M Leriche) add ICE3 !! 17/09/10 (M Leriche) add LUSECHIC flag +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -176,10 +177,7 @@ INTEGER :: JL ! and PACK intrinsics !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PZZ,3) - JPVEXT ! diff --git a/src/MNH/ch_aqueous_sedimc2r2.f90 b/src/MNH/ch_aqueous_sedimc2r2.f90 index 6963c4dc8..d09c51995 100644 --- a/src/MNH/ch_aqueous_sedimc2r2.f90 +++ b/src/MNH/ch_aqueous_sedimc2r2.f90 @@ -71,7 +71,8 @@ END MODULE MODI_CH_AQUEOUS_SEDIMC2R2 !! MODIFICATIONS !! ------------- !! Original 30/10/08 -!! 2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM +!! 2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -159,10 +160,7 @@ INTEGER :: JL ! and PACK intrinsics !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PZZ,3) - JPVEXT ! diff --git a/src/MNH/ch_aqueous_sedimkhko.f90 b/src/MNH/ch_aqueous_sedimkhko.f90 index 5a01ef65a..63f5eacbf 100644 --- a/src/MNH/ch_aqueous_sedimkhko.f90 +++ b/src/MNH/ch_aqueous_sedimkhko.f90 @@ -69,6 +69,7 @@ END MODULE MODI_CH_AQUEOUS_SEDIMKHKO !! MODIFICATIONS !! ------------- !! Original 03/11/08 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -150,10 +151,7 @@ INTEGER :: JL ! and PACK intrinsics !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PZZ,3) - JPVEXT ! diff --git a/src/MNH/ch_aqueous_tmicc2r2.f90 b/src/MNH/ch_aqueous_tmicc2r2.f90 index fa8987ff9..b034de2e0 100644 --- a/src/MNH/ch_aqueous_tmicc2r2.f90 +++ b/src/MNH/ch_aqueous_tmicc2r2.f90 @@ -70,7 +70,8 @@ END MODULE MODI_CH_AQUEOUS_TMICC2R2 !! MODIFICATIONS !! ------------- !! Original 06/05/08 -!! 2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM +!! 2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -172,10 +173,7 @@ INTEGER :: JL ! and PACK intrinsics !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PRCT,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PRCT,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PRCT,3) - JPVEXT ! diff --git a/src/MNH/ch_aqueous_tmicice.f90 b/src/MNH/ch_aqueous_tmicice.f90 index e9eb03788..4d0bd5b52 100644 --- a/src/MNH/ch_aqueous_tmicice.f90 +++ b/src/MNH/ch_aqueous_tmicice.f90 @@ -99,6 +99,7 @@ END MODULE MODI_CH_AQUEOUS_TMICICE !! M. Leriche 19/07/2010 add riming, freezing and melting for ice phase(ICE3) !! M. Leriche 17/09/2010 add OUSECHIC flag !! Juan 24/09/2012: for BUG Pgi rewrite PACK function on mode_pack_pgi +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -275,10 +276,7 @@ ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:) / XP00 ) ** (XRD/XCPD) !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PRCT,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PRCT,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PRCT,3) - JPVEXT ! diff --git a/src/MNH/ch_aqueous_tmickess.f90 b/src/MNH/ch_aqueous_tmickess.f90 index 07642f923..a428772a7 100644 --- a/src/MNH/ch_aqueous_tmickess.f90 +++ b/src/MNH/ch_aqueous_tmickess.f90 @@ -68,6 +68,7 @@ END MODULE MODI_CH_AQUEOUS_TMICKESS !! MODIFICATIONS !! ------------- !! Original 26/03/08 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -148,10 +149,7 @@ INTEGER :: JL ! and PACK intrinsics !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PRCT,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PRCT,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PRCT,3) - JPVEXT ! diff --git a/src/MNH/ch_aqueous_tmickhko.f90 b/src/MNH/ch_aqueous_tmickhko.f90 index 912765e34..c93eb3a9d 100644 --- a/src/MNH/ch_aqueous_tmickhko.f90 +++ b/src/MNH/ch_aqueous_tmickhko.f90 @@ -71,6 +71,7 @@ END MODULE MODI_CH_AQUEOUS_TMICKHKO !! MODIFICATIONS !! ------------- !! Original 03/11/08 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -159,10 +160,7 @@ INTEGER :: JL ! and PACK intrinsics !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PRCT,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PRCT,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PRCT,3) - JPVEXT ! diff --git a/src/MNH/change_gribex_var.f90 b/src/MNH/change_gribex_var.f90 index d7a8522ae..d7e48fda2 100644 --- a/src/MNH/change_gribex_var.f90 +++ b/src/MNH/change_gribex_var.f90 @@ -156,6 +156,7 @@ END MODULE MODI_CHANGE_GRIBEX_VAR !! Masson 06/12/96 add air temperature at ground !! Masson 12/12/96 add vertical wind component !! Masson 12/06/97 add relative humidity +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -226,11 +227,15 @@ REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZRHO_LS ! ! mass density at pressure points REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZRHOMASS_LS ! ! mass density at mass points +! +INTEGER :: IIB,IIE,IJB,IJE ! interior domaine bound +INTEGER :: JI !------------------------------------------------------------------------------- ! IIU=SIZE(PT_LS,1) IJU=SIZE(PT_LS,2) ILU=SIZE(PT_LS,3) +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! !------------------------------------------------------------------------------- ! @@ -337,23 +342,29 @@ IF (PRESENT(PW_LS)) THEN ! ------------------------------- ! ZSURFCOR_LS(:,:,:)=0. - ZSURFCOR_LS(2:IIU-1,2:IJU-1,:)= PU_LS(2:IIU-1,2:IJU-1,:) & + ZSURFCOR_LS(IIB:IIE,IJB:IJE,:)= PU_LS(IIB:IIE,IJB:IJE,:) & *SPREAD( & - (PZS_LS(3:IIU,2:IJU-1)-PZS_LS(1:IIU-2,2:IJU-1)) & - /SPREAD(XXHAT(3:IIU)-XXHAT(1:IIU-2),2,IJU-2) & - *XMAP(2:IIU-1,2:IJU-1) & + (PZS_LS(IIB+1:IIE+1,IJB:IJE)-PZS_LS(IIB-1:IIE-1,IJB:IJE)) & + /SPREAD(XXHAT(IIB+1:IIE+1)-XXHAT(IIB-1:IIE-1),2,IJE-IJB+1) & + *XMAP(IIB:IIE,IJB:IJE) & ,3,ILU) & - + PV_LS(2:IIU-1,2:IJU-1,:) & + + PV_LS(IIB:IIE,IJB:IJE,:) & *SPREAD( & - (PZS_LS(2:IIU-1,3:IJU)-PZS_LS(2:IIU-1,1:IJU-2)) & - /SPREAD(XYHAT(3:IJU)-XYHAT(1:IJU-2),1,IIU-2) & - *XMAP(2:IIU-1,2:IJU-1) & + (PZS_LS(IIB:IIE,IJB+1:IJE+1)-PZS_LS(IIB:IIE,IJB-1:IJE-1)) & + /SPREAD(XYHAT(IJB+1:IJE+1)-XYHAT(IJB-1:IJE-1),1,IIE-IIB+1) & + *XMAP(IIB:IIE,IJB:IJE) & ,3,ILU) ! - ZSURFCOR_LS( 1 , : ,1)=2.*ZSURFCOR_LS( 2 , : ,1)-ZSURFCOR_LS( 3 , : ,1) - ZSURFCOR_LS(IIU, : ,1)=2.*ZSURFCOR_LS(IIU-1, : ,1)-ZSURFCOR_LS(IIU-2, : ,1) - ZSURFCOR_LS( : , 1 ,1)=2.*ZSURFCOR_LS( : , 2 ,1)-ZSURFCOR_LS( : , 3 ,1) - ZSURFCOR_LS( : ,IJU,1)=2.*ZSURFCOR_LS( : ,IJU-1,1)-ZSURFCOR_LS( : ,IJU-2,1) + DO JI=1,JPHEXT + ZSURFCOR_LS(IIB-JI,:,1)=2.*ZSURFCOR_LS(IIB-JI+1,:,1)-ZSURFCOR_LS(IIB-JI+2,:,1) + ZSURFCOR_LS(IIE+JI,:,1)=2.*ZSURFCOR_LS(IIE+JI-1,:,1)-ZSURFCOR_LS(IIE+JI-2,:,1) + ZSURFCOR_LS(:,IJB-JI,1)=2.*ZSURFCOR_LS(:,IJB-JI+1,1)-ZSURFCOR_LS(:,IJB-JI+2,1) + ZSURFCOR_LS(:,IJE+JI,1)=2.*ZSURFCOR_LS(:,IJE+JI-1,1)-ZSURFCOR_LS(:,IJE+JI-2,1) + END DO +!!$ ZSURFCOR_LS( 1 , : ,1)=2.*ZSURFCOR_LS( 2 , : ,1)-ZSURFCOR_LS( 3 , : ,1) +!!$ ZSURFCOR_LS(IIU, : ,1)=2.*ZSURFCOR_LS(IIU-1, : ,1)-ZSURFCOR_LS(IIU-2, : ,1) +!!$ ZSURFCOR_LS( : , 1 ,1)=2.*ZSURFCOR_LS( : , 2 ,1)-ZSURFCOR_LS( : , 3 ,1) +!!$ ZSURFCOR_LS( : ,IJU,1)=2.*ZSURFCOR_LS( : ,IJU-1,1)-ZSURFCOR_LS( : ,IJU-2,1) ! !* 8.2 mass density ! ------------ @@ -383,19 +394,25 @@ IF (PRESENT(PW_LS)) THEN ! --------------------- ! ZHDIV_LS(:,:,:)=0. - ZHDIV_LS(2:IIU-1,2:IJU-1,:)=(ZDPDETA_LS(3:IIU,2:IJU-1,:)*PU_LS(3:IIU,2:IJU-1,:) & - -ZDPDETA_LS(1:IIU-2,2:IJU-1,:)*PU_LS(1:IIU-2,2:IJU-1,:)) & - /SPREAD(SPREAD(XXHAT(3:IIU)-XXHAT(1:IIU-2),2,IJU-2),3,ILU) & - *SPREAD(XMAP(2:IIU-1,2:IJU-1),3,ILU) & - +(ZDPDETA_LS(2:IIU-1,3:IJU,:)*PV_LS(2:IIU-1,3:IJU,:) & - -ZDPDETA_LS(2:IIU-1,1:IJU-2,:)*PV_LS(2:IIU-1,1:IJU-2,:)) & - /SPREAD(SPREAD(XYHAT(3:IJU)-XYHAT(1:IJU-2),1,IIU-2),3,ILU) & - *SPREAD(XMAP(2:IIU-1,2:IJU-1),3,ILU) -! - ZHDIV_LS( 1 , : ,:)=2.*ZHDIV_LS( 2 , : ,:)-ZHDIV_LS( 3 , : ,:) - ZHDIV_LS(IIU, : ,:)=2.*ZHDIV_LS(IIU-1, : ,:)-ZHDIV_LS(IIU-2, : ,:) - ZHDIV_LS( : , 1 ,:)=2.*ZHDIV_LS( : , 2 ,:)-ZHDIV_LS( : , 3 ,:) - ZHDIV_LS( : ,IJU,:)=2.*ZHDIV_LS( : ,IJU-1,:)-ZHDIV_LS( : ,IJU-2,:) + ZHDIV_LS(IIB:IIE,IJB:IJE,:)=(ZDPDETA_LS(IIB+1:IIE+1,IJB:IJE,:)*PU_LS(IIB+1:IIE+1,IJB:IJE,:) & + -ZDPDETA_LS(IIB-1:IIE-1,IJB:IJE,:)*PU_LS(IIB-1:IIE-1,IJB:IJE,:)) & + /SPREAD(SPREAD(XXHAT(IIB+1:IIE+1)-XXHAT(IIB-1:IIE-1),2,IJE-IJB+1),3,ILU) & + *SPREAD(XMAP(IIB:IIE,IJB:IJE),3,ILU) & + +(ZDPDETA_LS(IIB:IIE,IJB+1:IJE+1,:)*PV_LS(IIB:IIE,IJB+1:IJE+1,:) & + -ZDPDETA_LS(IIB:IIE,IJB-1:IJE-1,:)*PV_LS(IIB:IIE,IJB-1:IJE-1,:)) & + /SPREAD(SPREAD(XYHAT(IJB+1:IJE+1)-XYHAT(IJB-1:IJE-1),1,IIE-IIB+1),3,ILU) & + *SPREAD(XMAP(IIB:IIE,IJB:IJE),3,ILU) +! + DO JI=1,JPHEXT + ZHDIV_LS(IIB-JI,:,:)=2.*ZHDIV_LS(IIB-JI+1,:,:)-ZHDIV_LS(IIB-JI+2,:,:) + ZHDIV_LS(IIE+JI,:,:)=2.*ZHDIV_LS(IIE+JI-1,:,:)-ZHDIV_LS(IIE+JI-2,:,:) + ZHDIV_LS(:,IJB-JI,:)=2.*ZHDIV_LS(:,IJB-JI+1,:)-ZHDIV_LS(:,IJB-JI+2,:) + ZHDIV_LS(:,IJE+JI,:)=2.*ZHDIV_LS(:,IJE+JI-1,:)-ZHDIV_LS(:,IJE+JI-2,:) + END DO +!!$ ZHDIV_LS( 1 , : ,:)=2.*ZHDIV_LS( 2 , : ,:)-ZHDIV_LS( 3 , : ,:) +!!$ ZHDIV_LS(IIU, : ,:)=2.*ZHDIV_LS(IIU-1, : ,:)-ZHDIV_LS(IIU-2, : ,:) +!!$ ZHDIV_LS( : , 1 ,:)=2.*ZHDIV_LS( : , 2 ,:)-ZHDIV_LS( : , 3 ,:) +!!$ ZHDIV_LS( : ,IJU,:)=2.*ZHDIV_LS( : ,IJU-1,:)-ZHDIV_LS( : ,IJU-2,:) ! !* 8.6 Integration of horizontal divergence ! ------------------------------------ diff --git a/src/MNH/check_zs.f90 b/src/MNH/check_zs.f90 index e2a2c795a..b564a4dac 100644 --- a/src/MNH/check_zs.f90 +++ b/src/MNH/check_zs.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/05/18 13:07:25 !----------------------------------------------------------------- !################### MODULE MODI_CHECK_ZS @@ -77,6 +76,7 @@ END MODULE MODI_CHECK_ZS !! Original 24/09/96 !! 20/05/98 (V. Masson and J. Stein) include the case where !! the domain is reduced +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -200,12 +200,12 @@ IF ( MOD(NIMAX,IDXRATIO) /= 0 .OR. MOD(NJMAX,IDYRATIO) /= 0 ) THEN RETURN END IF ! -IF ( MOD(KIINF-JPHEXT,IDXRATIO) /= 0 .OR. MOD(KJINF-JPHEXT,IDYRATIO) /= 0 ) THEN +IF ( MOD(KIINF-1,IDXRATIO) /= 0 .OR. MOD(KJINF-1,IDYRATIO) /= 0 ) THEN WRITE (ILUOUT0,*) '********************************************************' WRITE (ILUOUT0,*) 'Your truncated domain does not start on an grid mesh' WRITE (ILUOUT0,*) 'border of its father domain; no nesting allowed' - WRITE (ILUOUT0,*) 'KIINF-JPHEXT=',KIINF-JPHEXT,' IDXRATIO=',IDXRATIO - WRITE (ILUOUT0,*) 'KIINF-JPHEXT=',KJINF-JPHEXT,' IDYRATIO=',IDYRATIO + WRITE (ILUOUT0,*) 'KIINF-1=',KIINF-1,' IDXRATIO=',IDXRATIO + WRITE (ILUOUT0,*) 'KIINF-1=',KJINF-1,' IDYRATIO=',IDYRATIO WRITE (ILUOUT0,*) '********************************************************' HDAD_NAME=' ' RETURN diff --git a/src/MNH/convection.f90 b/src/MNH/convection.f90 index 7e1bb5669..84eb18803 100644 --- a/src/MNH/convection.f90 +++ b/src/MNH/convection.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 conv 2006/09/21 11:03:24 !----------------------------------------------------------------- ! ###################### MODULE MODI_CONVECTION @@ -159,6 +158,7 @@ END MODULE MODI_CONVECTION !! MODIFICATIONS !! ------------- !! Original 11/12/98 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -305,10 +305,7 @@ IIU = SIZE(PTHT,1) IJU = SIZE(PTHT,2) IKU = SIZE(PTHT,3) ICH1= SIZE(PCH1,4) -IIB = 1 + JPHEXT -IIE = IIU - JPHEXT -IJB = 1 + JPHEXT -IJE = IJU - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKE = IKU - JPVEXT ILON = (IIE-IIB+1) * (IJE-IJB+1) diff --git a/src/MNH/define_maskn.f90 b/src/MNH/define_maskn.f90 index ad3125de5..d234f7543 100644 --- a/src/MNH/define_maskn.f90 +++ b/src/MNH/define_maskn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_nest_pgd 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ######################## MODULE MODI_DEFINE_MASK_n @@ -54,6 +53,7 @@ END MODULE MODI_DEFINE_MASK_n !! MODIFICATIONS !! ------------- !! Original 26/09/96 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -97,8 +97,8 @@ DO JLOOP=1,NMODEL IF (NDAD(JLOOP)/=IMI) CYCLE ISON=ISON+1 NSON(ISON)=JLOOP - NNESTMASK(NXOR_ALL(JLOOP)+1:NXEND_ALL(JLOOP)-1, & - NYOR_ALL(JLOOP)+1:NYEND_ALL(JLOOP)-1, ISON) = 1 + NNESTMASK(NXOR_ALL(JLOOP)+JPHEXT:NXEND_ALL(JLOOP)-JPHEXT, & + NYOR_ALL(JLOOP)+JPHEXT:NYEND_ALL(JLOOP)-JPHEXT, ISON) = 1 END DO ! IF (ANY (SUM(NNESTMASK(:,:,:),DIM=3)>1) ) THEN diff --git a/src/MNH/dflux_corr.f90 b/src/MNH/dflux_corr.f90 index a38e1b414..61287d64e 100644 --- a/src/MNH/dflux_corr.f90 +++ b/src/MNH/dflux_corr.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 adiab 2006/06/08 15:57:16 !----------------------------------------------------------------- ! ########################## MODULE MODI_DFLUX_CORR @@ -112,6 +111,7 @@ END MODULE MODI_DFLUX_CORR !! J Escobar !! J. Stein & 20/03/01 : bug for the open case at the boundary !! P. Jabouille +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -242,14 +242,15 @@ ZBETAOUT(:,:,IKU) = 1. ! because no velocity is available ! ! Update halo and apply possible cyclic boundary conditions ! -IF(NHALO == 1 .OR. HLBCX(1)=='CYCL' .OR. HLBCY(1)=='CYCL') THEN +!!$IF(NHALO == 1 .OR. HLBCX(1)=='CYCL' .OR. HLBCY(1)=='CYCL') THEN +IF(HLBCX(1)=='CYCL' .OR. HLBCY(1)=='CYCL') THEN CALL ADD3DFIELD_ll(TZFIELDS_ll, ZBETAOUT) - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll) - ELSE - IF(HLBCX(1)=='CYCL') CALL UPDATE_BOUNDARIES_ll('XX',TZFIELDS_ll,IINFO_ll) - IF(HLBCY(1)=='CYCL') CALL UPDATE_BOUNDARIES_ll('YY',TZFIELDS_ll,IINFO_ll) - END IF +!!$ ELSE +!!$ IF(HLBCX(1)=='CYCL') CALL UPDATE_BOUNDARIES_ll('XX',TZFIELDS_ll,IINFO_ll) +!!$ IF(HLBCY(1)=='CYCL') CALL UPDATE_BOUNDARIES_ll('YY',TZFIELDS_ll,IINFO_ll) +!!$ END IF CALL CLEANLIST_ll(TZFIELDS_ll) ENDIF ! diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index ad2367b83..38e9a51b3 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -70,8 +70,8 @@ !! D.Ricard 2015 : add LMOIST_ES !! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for !! aircraft, ballon and profiler -! -! +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -156,6 +156,8 @@ USE MODN_NCOUT USE MODE_UTIL #endif ! +USE MODN_CONF, ONLY : JPHEXT , NHALO +! IMPLICIT NONE ! !* 0.1 declarations of local variables @@ -220,6 +222,7 @@ NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS, & ! NAMELIST/NAM_DIAG_FILE/ YINIFILE,YINIFILEPGD, YSUFFIX NAMELIST/NAM_STO_FILE/ CFILES, NSTART_SUPP +NAMELIST/NAM_CONF_DIAG/JPHEXT, NHALO ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/dyn_sources.f90 b/src/MNH/dyn_sources.f90 index b54ad1e71..5bdb5483a 100644 --- a/src/MNH/dyn_sources.f90 +++ b/src/MNH/dyn_sources.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 adiab 2006/06/06 15:20:45 !----------------------------------------------------------------- ! ####################### MODULE MODI_DYN_SOURCES @@ -151,6 +150,7 @@ END MODULE MODI_DYN_SOURCES !! Corrections 03/12/02 (P. Jabouille) add no thinshell condition !! Correction 06/10 (C.Lac) Exclude L1D for Coriolis term !! Modification 03/11 (C.Lac) Split the gravity term due to buoyancy +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -164,6 +164,8 @@ USE MODD_DYN USE MODI_SHUMAN USE MODI_GRADIENT_M USE MODI_BUDGET +! +USE MODE_MPPDB ! IMPLICIT NONE ! @@ -241,6 +243,14 @@ IF ((.NOT.L1D).AND.(.NOT.LCARTESIAN) ) THEN ZWORK3(:,:,:) = 1.0 / ( XRADIUS + MZF(1,IKU,1,PZZ(:,:,:)) ) ZWORK1(:,:,:) = SPREAD( PCURVX(:,:),DIM=3,NCOPIES=IKU ) ZWORK2(:,:,:) = SPREAD( PCURVY(:,:),DIM=3,NCOPIES=IKU ) + CALL MPPDB_CHECK3DM("DYN_SOOURCES:ZWORK3,ZWORK1,ZWORK2",PRECISION,& + & ZWORK3,ZWORK1,ZWORK2,& + & MXM( MYF(ZRVT*PVT) * ZWORK2 * ZWORK3 ) , & + & MXM( ( MYF(PVT) * ZWORK1 - MZF(1,IKU,1,PWT) ) * ZWORK3 ) ,& + & MYF(PVT) * ZWORK1 - MZF(1,IKU,1,PWT) , & + & MYF(PVT) , MZF(1,IKU,1,PWT) , MXM(PWT) , MYM(PWT) ) + CALL MPPDB_CHECK3DM("DYN_SOOURCES:SUITE",PRECISION,& + & MXM(ZRVT),MXM(PVT),MXM(PWT),MXM(ZWORK1),MXM(ZWORK2),MXM(ZWORK3) ) ! PRUS(:,:,:) = PRUS & + MXM( MYF(ZRVT*PVT) * ZWORK2 * ZWORK3 ) & diff --git a/src/MNH/elec_trid.f90 b/src/MNH/elec_trid.f90 index 6a78e9c38..3a54b8f4e 100644 --- a/src/MNH/elec_trid.f90 +++ b/src/MNH/elec_trid.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 init 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ##################### MODULE MODI_ELEC_TRID @@ -179,6 +178,7 @@ END MODULE MODI_ELEC_TRID !! (to avoid problem in bouissinesq configuration) !! 01/07/12 (J-P. Pinty) add a non-homogeneous fair-weather !! top boundary condition (Neuman) +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS diff --git a/src/MNH/endstep.f90 b/src/MNH/endstep.f90 index 59e8031f1..e3b60d940 100644 --- a/src/MNH/endstep.f90 +++ b/src/MNH/endstep.f90 @@ -190,6 +190,7 @@ END MODULE MODI_ENDSTEP !! advected with PPM !! 04/2013 (C.Lac) FIT for all the variables !! 04/2014 (C.Lac) Check on the positivity of XSVT +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------ ! @@ -272,10 +273,7 @@ INTEGER :: IJB, IJE ! index of first and last inner mass points along y ! !------------------------------------------------------------------------------ ! -IIB = 1 + JPHEXT -IIE = SIZE(PUT,1) - JPHEXT -IJB = 1 + JPHEXT -IJE = SIZE(PUT,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKU=SIZE(XZHAT) ! !* 1. ASSELIN FILTER diff --git a/src/MNH/extract_vortex.f90 b/src/MNH/extract_vortex.f90 index 2aefc2ebe..df1bb103b 100644 --- a/src/MNH/extract_vortex.f90 +++ b/src/MNH/extract_vortex.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ########################## MODULE MODI_EXTRACT_VORTEX @@ -93,6 +92,7 @@ END MODULE MODI_EXTRACT_VORTEX !! MODIFICATIONS !! ------------- !! Original 01/12/01 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -100,9 +100,10 @@ END MODULE MODI_EXTRACT_VORTEX ! ------------ ! USE MODD_CST, ONLY: XPI -USE MODD_PARAMETERS, ONLY: JPHEXT,XUNDEF +USE MODD_PARAMETERS, ONLY: XUNDEF USE MODD_DIM_n, ONLY: NIMAX,NJMAX USE MODD_GRID_n, ONLY: XXHAT,XYHAT +USE MODE_ll ! IMPLICIT NONE ! @@ -139,10 +140,7 @@ IX= SIZE(PVARIN,1) IY= SIZE(PVARIN,2) IPHI=SIZE(PR0,1) ! -IIB=1+JPHEXT -IJB=1+JPHEXT -IIE=NIMAX+JPHEXT -IJE=NJMAX+JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! ZDELTAX = XXHAT(3) - XXHAT(2) ZDELTAY = XYHAT(3) - XYHAT(2) diff --git a/src/MNH/fast_terms.f90 b/src/MNH/fast_terms.f90 index d13b5e8eb..76c571bdc 100644 --- a/src/MNH/fast_terms.f90 +++ b/src/MNH/fast_terms.f90 @@ -157,7 +157,8 @@ END MODULE MODI_FAST_TERMS !! November 6, 2002 (S. Malardel,J.Pergaud) Cloud Fract + Rc of !! Mass flux convection !! Scheme -!! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test +!! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -172,6 +173,7 @@ USE MODI_CONDENS USE MODI_BUDGET USE MODE_FM USE MODE_FMWRIT +USE MODI_GET_HALO ! IMPLICIT NONE ! @@ -314,6 +316,7 @@ DO JITER =1,ITERMAX ! !* 2.6 compute the saturation vapor pressure at t+1 ! + CALL GET_HALO(ZT) ZW1(:,:,:) = EXP( XALPW - XBETAW/ZT(:,:,:) - XGAMW*ALOG( ZT(:,:,:) ) ) ! !* 2.7 compute the saturation mixing ratio at t+1 diff --git a/src/MNH/fill_sonfieldn.f90 b/src/MNH/fill_sonfieldn.f90 index b86e9e1f2..4e6f7c01e 100644 --- a/src/MNH/fill_sonfieldn.f90 +++ b/src/MNH/fill_sonfieldn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_nest_pgd 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ########################## MODULE MODI_FILL_SONFIELD_n @@ -59,6 +58,7 @@ END MODULE MODI_FILL_SONFIELD_n !! MODIFICATIONS !! ------------- !! Original 27/09/96 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -98,10 +98,10 @@ CALL GOTO_MODEL(KMI) ! !* correct only if JPHEXT = 1 ! -IIB1 = NXOR_ALL (KMI)+1 -IIE1 = NXEND_ALL(KMI)-1 -IJB1 = NYOR_ALL (KMI)+1 -IJE1 = NYEND_ALL(KMI)-1 +IIB1 = NXOR_ALL (KMI)+JPHEXT +IIE1 = NXEND_ALL(KMI)-JPHEXT +IJB1 = NYOR_ALL (KMI)+JPHEXT +IJE1 = NYEND_ALL(KMI)-JPHEXT ! DO JLAYER=1,SIZE(PNESTFIELD,4) PNESTFIELD(:,:,KLSON,JLAYER) = XUNDEF diff --git a/src/MNH/flash_geom_elec.f90 b/src/MNH/flash_geom_elec.f90 index 5937f71b0..baa20675a 100644 --- a/src/MNH/flash_geom_elec.f90 +++ b/src/MNH/flash_geom_elec.f90 @@ -72,6 +72,7 @@ END MODULE MODI_FLASH_GEOM_ELEC_n !! Original : Jan. 2010 !! Modifications: !! M. Chong * LA * Juin 2010 : add small ions +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -79,7 +80,7 @@ END MODULE MODI_FLASH_GEOM_ELEC_n ! ------------ ! USE MODD_CONF, ONLY : CEXP -USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT +USE MODD_PARAMETERS, ONLY : JPVEXT USE MODD_GRID_n, ONLY : XXHAT, XYHAT, XZHAT USE MODD_DYN_n, ONLY : XDXHATM, XDYHATM, NSTOP USE MODD_ELEC_DESCR @@ -274,10 +275,7 @@ CALL MYPROC_ELEC_ll(IPROC) !* 1.1 subdomains indexes ! ! beginning and end indexes of the physical subdomain -IIB = 1 + JPHEXT -IIE = SIZE(PRT,1) - JPHEXT -IJB = 1 + JPHEXT -IJE = SIZE(PRT,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKE = SIZE(PRT,3) - JPVEXT IKU = SIZE(PRT,3) diff --git a/src/MNH/get_sizex_lb.f90 b/src/MNH/get_sizex_lb.f90 index 24eed91f3..8e93830ce 100644 --- a/src/MNH/get_sizex_lb.f90 +++ b/src/MNH/get_sizex_lb.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 init 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ########################## MODULE MODI_GET_SIZEX_LB @@ -89,6 +88,7 @@ END MODULE MODI_GET_SIZEX_LB !! MODIFICATIONS !! ------------- !! Original 23/09/98 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -148,7 +148,7 @@ KJSIZEX2=0 IF (KRIMX /=0) THEN ! Western side, mass points : 1:NRIMX+1,1:NJMAX_ll+ 2 * JPHEXT IXOR=1 - IXEND=KRIMX+1 + IXEND=KRIMX+JPHEXT ! +1 IYOR=1 IYEND=KJMAX_ll+ 2 * JPHEXT CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) @@ -158,7 +158,7 @@ IF (KRIMX /=0) THEN ENDIF ! Eastern side , mass and u-grid points: ! NIMAX_ll+JPHEXT-NRIMX +1:NIMAX_ll+ 2 *JPHEXT,1:NJMAX_ll+2 *JPHEXT - IXOR=KIMAX_ll+ 2 * JPHEXT-KRIMX + IXOR=KIMAX_ll + 2 * JPHEXT-KRIMX-JPHEXT+1 ! -KRIMX IXEND=KIMAX_ll+ 2 * JPHEXT IYOR=1 IYEND=KJMAX_ll+ 2 * JPHEXT @@ -171,7 +171,7 @@ IF (KRIMX /=0) THEN ENDIF ! Western side, u-grid points : 2:NRIMX+2,1:NJMAX_ll+ 2 * JPHEXT IXOR=2 - IXEND=KRIMX+2 + IXEND=KRIMX+JPHEXT+1 ! +2 IYOR=1 IYEND=KJMAX_ll+ 2 * JPHEXT CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) @@ -184,8 +184,8 @@ ENDIF !* 2.2 West-East LB zone with only 2 points at each side ! ! Western side : 2:3,1:NJMAX_ll+ 2 * JPHEXT -IXOR=2 -IXEND=3 +IXOR=2 ! 2 +IXEND=JPHEXT+2 ! 3 IYOR=1 IYEND=KJMAX_ll+ 2 * JPHEXT CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) @@ -194,8 +194,8 @@ IF (IINFO /=1 ) THEN ! no empty intersection KJSIZEX4= IYENDI - IYORI +1 ENDIF ! Eastern side, : NIMAX_ll+JPHEXT:NIMAX_ll+ 2 *JPHEXT,1:NJMAX_ll+2 *JPHEXT -IXOR=KIMAX_ll+JPHEXT -IXEND=KIMAX_ll+ 2 * JPHEXT +IXOR=KIMAX_ll + 2 * JPHEXT - JPHEXT ! + JPHEXT +IXEND=KIMAX_ll+ 2 * JPHEXT - JPHEXT + JPHEXT ! + 2*JPHEXT IYOR=1 IYEND=KJMAX_ll+ 2 * JPHEXT CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) @@ -207,8 +207,8 @@ ENDIF !* 2.3 West-East LB zone with only 1 point at each side ! ! Western side : 1:1,1:NJMAX_ll+ 2 * JPHEXT -IXOR=1 -IXEND=1 +IXOR=1 ! 1 +IXEND=JPHEXT ! 1 IYOR=1 IYEND=KJMAX_ll+ 2 * JPHEXT CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) @@ -217,8 +217,8 @@ IF (IINFO /=1) THEN ! no empty intersection KJSIZEX2= IYENDI - IYORI +1 ENDIF ! East boundary, 1 point LB zone : NIMAX_ll+ 2 * JPHEXT:NIMAX_ll+ 2 *JPHEXT,1:NJMAX_ll+2 *JPHEXT -IXOR=KIMAX_ll + 2 * JPHEXT -IXEND=KIMAX_ll + 2 * JPHEXT +IXOR=KIMAX_ll + 2 * JPHEXT - JPHEXT + 1 ! + 2 * JPHEXT +IXEND=KIMAX_ll + 2 * JPHEXT - JPHEXT + JPHEXT ! + 2 * JPHEXT IYOR=1 IYEND=KJMAX_ll+ 2 * JPHEXT CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) diff --git a/src/MNH/get_sizey_lb.f90 b/src/MNH/get_sizey_lb.f90 index b7fc55c6c..51491f23a 100644 --- a/src/MNH/get_sizey_lb.f90 +++ b/src/MNH/get_sizey_lb.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 init 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ########################## MODULE MODI_GET_SIZEY_LB @@ -89,6 +88,7 @@ END MODULE MODI_GET_SIZEY_LB !! MODIFICATIONS !! ------------- !! Original 23/09/98 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -150,7 +150,7 @@ IF (KRIMY /=0) THEN IXOR=1 IXEND=KIMAX_ll+ 2 * JPHEXT IYOR=1 - IYEND=KRIMY+1 + IYEND=KRIMY+JPHEXT ! +1 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) IF (IINFO/=1) THEN ! no empty intersection KISIZEYF= IXENDI - IXORI +1 @@ -160,7 +160,7 @@ IF (KRIMY /=0) THEN ! 1:NIMAX_ll+2 *JPHEXT,NJMAX_ll+JPHEXT-NRIMY +1:NJMAX_ll+ 2 *JPHEXT, IXOR=1 IXEND=KIMAX_ll+ 2 * JPHEXT - IYOR=KJMAX_ll+ 2 * JPHEXT-KRIMY + IYOR=KJMAX_ll + 2 * JPHEXT-KRIMY-JPHEXT+1 ! -KRIMY IYEND=KJMAX_ll+ 2 * JPHEXT CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) IF (IINFO/=1) THEN ! no empty intersection @@ -173,7 +173,7 @@ IF (KRIMY /=0) THEN IXOR=1 IXEND=KIMAX_ll+ 2 * JPHEXT IYOR=2 - IYEND=KRIMY+2 + IYEND=KRIMY+JPHEXT+1 !+2 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) IF (IINFO /= 1) THEN ! no empty intersection KISIZEYFV= IXENDI - IXORI +1 @@ -186,8 +186,8 @@ ENDIF ! Southern side : 1:NIMAX_ll+ 2 * JPHEXT,2:3 IXOR=1 IXEND=KIMAX_ll+ 2 * JPHEXT -IYOR=2 -IYEND=3 +IYOR=2 !2 +IYEND=JPHEXT+2 !3 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) IF (IINFO /=1 ) THEN ! no empty intersection KISIZEY4= IXENDI - IXORI +1 @@ -196,8 +196,8 @@ ENDIF ! Northern side, : 1:NIMAX_ll+2 *JPHEXT,NJMAX_ll+JPHEXT:NJMAX_ll+ 2 *JPHEXT IXOR= 1 IXEND=KIMAX_ll+ 2 * JPHEXT -IYOR=KJMAX_ll+JPHEXT -IYEND=KJMAX_ll+ 2 * JPHEXT +IYOR=KJMAX_ll + 2 * JPHEXT - JPHEXT ! + JPHEXT +IYEND=KJMAX_ll+ 2 * JPHEXT - JPHEXT + JPHEXT ! + 2*JPHEXT CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) IF (IINFO/=1) THEN ! no empty intersection KISIZEY4=IXENDI - IXORI +1 @@ -209,8 +209,8 @@ ENDIF ! Southern side : 1:NIMAX_ll+ 2 * JPHEXT,1:1 IXOR=1 IXEND=KIMAX_ll+ 2 * JPHEXT -IYOR=1 -IYEND=1 +IYOR=1 ! 1 +IYEND=JPHEXT ! 1 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) IF (IINFO /=1) THEN ! no empty intersection KISIZEY2= IXENDI - IXORI +1 @@ -219,8 +219,8 @@ ENDIF ! Northern boundary, 1 point LB zone :1:NIMAX_ll+2 *JPHEXT, NJMAX_ll+ 2 * JPHEXT:NJMAX_ll+ 2 *JPHEXT, IXOR=1 IXEND=KIMAX_ll + 2 * JPHEXT -IYOR=KJMAX_ll + 2 * JPHEXT -IYEND=KJMAX_ll+ 2 * JPHEXT +IYOR=KJMAX_ll + 2 * JPHEXT - JPHEXT + 1 ! + 2 * JPHEXT +IYEND=KJMAX_ll+ 2 * JPHEXT - JPHEXT + JPHEXT ! + 2 * JPHEXT CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO) IF (IINFO /=1) THEN ! no empty intersection KISIZEY2= IXENDI - IXORI +1 diff --git a/src/MNH/gradient_m.f90 b/src/MNH/gradient_m.f90 index 670e7687f..c29a571d6 100644 --- a/src/MNH/gradient_m.f90 +++ b/src/MNH/gradient_m.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 operators 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ###################### MODULE MODI_GRADIENT_M @@ -160,6 +159,7 @@ END MODULE MODI_GRADIENT_M !! ------------- !! Original 18/07/94 !! 19/07/00 add the LFLAT switch (J. Stein) +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -525,14 +525,14 @@ IF (.NOT. LFLAT) THEN ! DO JI=1+JPHEXT,IIU PGX_M_U(JI,:,KKU)= ( PY(JI,:,KKU)-PY(JI-1,:,KKU) ) / PDXX(JI,:,KKU) - PGX_M_U(JI,:,KKA)= -999. + PGX_M_U(JI,:,KKA)= PGX_M_U(JI,:,KKU) ! -999. END DO ! PGX_M_U(1,:,:)=PGX_M_U(IIU-2*JPHEXT+1,:,:) ELSE ! PGX_M_U = DXM(PY) / PDXX - PGX_M_U(1+JPHEXT:IIU,:,:) = ( PY(1+JPHEXT:IIU,:,:)-PY(JPHEXT:IIU-1,:,:) ) & - / PDXX(1+JPHEXT:IIU,:,:) + PGX_M_U(1+1:IIU,:,:) = ( PY(1+1:IIU,:,:)-PY(1:IIU-1,:,:) ) & ! +JPHEXT + / PDXX(1+1:IIU,:,:) ! PGX_M_U(1,:,:)=PGX_M_U(IIU-2*JPHEXT+1,:,:) ENDIF @@ -650,14 +650,14 @@ IF (.NOT. LFLAT) THEN ! DO JJ=1+JPHEXT,IJU PGY_M_V(:,JJ,KKU)= ( PY(:,JJ,KKU)-PY(:,JJ-1,KKU) ) / PDYY(:,JJ,KKU) - PGY_M_V(:,JJ,KKA)= -999. + PGY_M_V(:,JJ,KKA)= PGY_M_V(:,JJ,KKU) ! -999. END DO ! PGY_M_V(:,1,:)=PGY_M_V(:,IJU-2*JPHEXT+1,:) ELSE ! PGY_M_V = DYM(PY)/PDYY - PGY_M_V(:,1+JPHEXT:IJU,:) = ( PY(:,1+JPHEXT:IJU,:)-PY(:,JPHEXT:IJU-1,:) ) & - / PDYY(:,1+JPHEXT:IJU,:) + PGY_M_V(:,1+1:IJU,:) = ( PY(:,1+1:IJU,:)-PY(:,1:IJU-1,:) ) & ! +JPHEXT + / PDYY(:,1+1:IJU,:) ! PGY_M_V(:,1,:)=PGY_M_V(:,IJU-2*JPHEXT+1,:) ENDIF @@ -752,7 +752,7 @@ PGZ_M_W(:,:,IKTB:IKTE) = (PY(:,:,IKTB:IKTE)-PY(:,:,IKTB-KL:IKTE-KL)) & / PDZZ(:,:,IKTB:IKTE) PGZ_M_W(:,:,KKU)= (PY(:,:,KKU)-PY(:,:,KKU-KL)) & / PDZZ(:,:,KKU) -PGZ_M_W(:,:,KKA)=-999. +PGZ_M_W(:,:,KKA)= PGZ_M_W(:,:,KKU) ! -999. ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/gravity.f90 b/src/MNH/gravity.f90 index 91ec276c6..271d59102 100644 --- a/src/MNH/gravity.f90 +++ b/src/MNH/gravity.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 adiab 2006/06/06 15:20:45 !----------------------------------------------------------------- ! ################### MODULE MODI_GRAVITY @@ -105,6 +104,7 @@ END MODULE MODI_GRAVITY !! ------------- !! C.Lac - March 2011 - Splitted from dyn_sources !! Q.Rodier 06/15 correction on budget +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -115,6 +115,8 @@ USE MODD_CONF USE MODD_CST ! USE MODI_SHUMAN +USE MODI_BUDGET +USE MODI_GET_HALO ! IMPLICIT NONE ! @@ -158,11 +160,15 @@ IF( .NOT.L1D ) THEN ! no buoyancy for 1D case ZRV_OV_RD = XRV / XRD ZWORK1(:,:,:) = 1. DO JWATER = 1 , 1+KRRL+KRRI + CALL GET_HALO(PRT(:,:,:,JWATER)) ZWORK1(:,:,:) = ZWORK1(:,:,:) + PRT(:,:,:,JWATER) END DO ! ! compute the virtual potential temperature when water is present in any form ! + CALL GET_HALO(PTHT) +! + ZWORK2(:,:,:) = PTHT(:,:,:) * (1. + PRT(:,:,:,1)*ZRV_OV_RD) / ZWORK1(:,:,:) ELSE ! diff --git a/src/MNH/ice_adjust.f90 b/src/MNH/ice_adjust.f90 index 9cd762643..243ded20a 100644 --- a/src/MNH/ice_adjust.f90 +++ b/src/MNH/ice_adjust.f90 @@ -163,6 +163,7 @@ END MODULE MODI_ICE_ADJUST !! (E.Perraud) 06/08 add correction to avoid ice when T >0 !! S. Riette ice for EDKF !! 2012-02 Y. Seity, add possibility to run with reversed vertical levels +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -177,6 +178,7 @@ USE MODD_BUDGET USE MODI_CONDENSATION USE MODI_BUDGET USE MODE_FMWRIT +USE MODI_GET_HALO ! IMPLICIT NONE ! @@ -276,10 +278,7 @@ LOGICAL :: LPRETREATMENT, LNEW_ADJUST IIU = SIZE(PEXNREF,1) IJU = SIZE(PEXNREF,2) IKU = SIZE(PEXNREF,3) -IIB = 1 + JPHEXT -IIE = IIU - JPHEXT -IJB = 1 + JPHEXT -IJE = IJU - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=KKA+JPVEXT*KKL IKE=KKU-JPVEXT*KKL ! @@ -377,6 +376,7 @@ END IF ! !* compute the saturation vapor pressures at t+1 ! + CALL GET_HALO(ZT) ZW1(:,:,:) = EXP( XALPW - XBETAW/ZT(:,:,:) - XGAMW*ALOG(ZT(:,:,:)) ) ! e_sw ZW2(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:)) ) ! e_si ZW1(:,:,:) = MIN(PPABST(:,:,:)/2.,ZW1(:,:,:)) ! safety limitation diff --git a/src/MNH/ice_adjust_elec.f90 b/src/MNH/ice_adjust_elec.f90 index de195da7c..dd9be1207 100644 --- a/src/MNH/ice_adjust_elec.f90 +++ b/src/MNH/ice_adjust_elec.f90 @@ -175,6 +175,7 @@ END MODULE MODI_ICE_ADJUST_ELEC !! Original 2002 !! C. Barthe 19/11/09 update to version 4.8.1 !! M. Chong Mar. 2010 Add small ions +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -192,6 +193,7 @@ USE MODD_RAIN_ICE_DESCR, ONLY : XRTMIN, XBI USE MODI_CONDENSATION USE MODI_BUDGET USE MODE_FMWRIT +USE MODI_GET_HALO ! IMPLICIT NONE ! @@ -316,10 +318,7 @@ LOGICAL :: LPRETREATMENT, LNEW_ADJUST IIU = SIZE(PEXNREF,1) IJU = SIZE(PEXNREF,2) IKU = SIZE(PEXNREF,3) -IIB = 1 + JPHEXT -IIE = IIU - JPHEXT -IJB = 1 + JPHEXT -IJE = IJU - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKE = IKU - JPVEXT ! @@ -415,6 +414,7 @@ DO JITER = 1, ITERMAX ! ! compute the saturation vapor pressures at t+1 ! + CALL GET_HALO(ZT) ZW1(:,:,:) = EXP(XALPW - XBETAW/ZT(:,:,:) - XGAMW*ALOG(ZT(:,:,:))) ! e_sw ZW2(:,:,:) = EXP(XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:))) ! e_si ZW1(:,:,:) = MIN(PPABST(:,:,:)/2.,ZW1(:,:,:)) ! safety limitation diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90 index b92924f6c..08760e2d3 100644 --- a/src/MNH/ini_lb.f90 +++ b/src/MNH/ini_lb.f90 @@ -125,6 +125,7 @@ SUBROUTINE INI_LB(HINIFILE,HLUOUT,OLSOURCE,KSV, & !! C.Lac 20/03/08 Add passive pollutants !! M.Leriche 16/07/10 Add ice phase chemical species !! Pialat/tulet 15/02/12 Add ForeFire scalars +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -147,6 +148,7 @@ USE MODD_ICE_C1R3_DESCR, ONLY: C1R3NAMES USE MODD_CH_M9_n, ONLY: CNAMES, CICNAMES USE MODD_LG, ONLY: CLGNAMES USE MODD_ELEC_DESCR, ONLY: CELECNAMES +USE MODD_PARAMETERS, ONLY: JPHEXT IMPLICIT NONE ! !* 0.1 declarations of arguments @@ -267,23 +269,23 @@ YDIR='--' CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,GHORELAX_UVWTH,IGRID,ILENCH,YCOMMENT,IRESP) ! IF (GHORELAX_UVWTH) THEN - IRIMX =(KSIZELBX_ll-1)/2 - IRIMXU=(KSIZELBXU_ll-1)/2 - IRIMY =(KSIZELBY_ll-1)/2 - IRIMYV=(KSIZELBYV_ll-1)/2 - IL3DX=2*ILBSIZEX+2 + IRIMX =(KSIZELBX_ll-2*JPHEXT)/2 + IRIMXU=(KSIZELBXU_ll-2*JPHEXT)/2 + IRIMY =(KSIZELBY_ll-2*JPHEXT)/2 + IRIMYV=(KSIZELBYV_ll-2*JPHEXT)/2 + IL3DX=2*ILBSIZEX+2*JPHEXT IL3DXU=IL3DX - IL3DY=2*ILBSIZEY+2 + IL3DY=2*ILBSIZEY+2*JPHEXT IL3DYV=IL3DY ELSE IRIMX=0 IRIMXU=1 IRIMY=0 IRIMYV=1 - IL3DX=2 - IL3DY=2 - IL3DXU=4 - IL3DYV=4 + IL3DX=2*JPHEXT ! 2 + IL3DY=2*JPHEXT ! 2 + IL3DXU=2 + 2*JPHEXT ! 4 + IL3DYV=2 + 2*JPHEXT ! 4 ENDIF ! IF (KSIZELBXU_ll/= 0) THEN @@ -363,15 +365,15 @@ CASE('READ') YDIR='--' CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,GHORELAX_TKE,IGRID,ILENCH,YCOMMENT,IRESP) IF (GHORELAX_TKE) THEN - IRIMX=(KSIZELBXTKE_ll-1)/2 - IRIMY=(KSIZELBYTKE_ll-1)/2 - IL3DX=2*ILBSIZEX+2 - IL3DY=2*ILBSIZEY+2 + IRIMX=(KSIZELBXTKE_ll-2*JPHEXT)/2 + IRIMY=(KSIZELBYTKE_ll-2*JPHEXT)/2 + IL3DX=2*ILBSIZEX+2*JPHEXT + IL3DY=2*ILBSIZEY+2*JPHEXT ELSE IRIMX=0 IRIMY=0 - IL3DX=2 - IL3DY=2 + IL3DX=2*JPHEXT ! 2 + IL3DY=2*JPHEXT ! 2 ENDIF ! YRECFM='LBXTKEM' @@ -404,15 +406,15 @@ IF(KSIZELBXR_ll > 0 ) THEN YRECFMX(:)=(/"LBXRVM","LBXRCM","LBXRRM","LBXRIM","LBXRSM","LBXRGM","LBXRHM"/) YRECFMY(:)=(/"LBYRVM","LBYRCM","LBYRRM","LBYRIM","LBYRSM","LBYRGM","LBYRHM"/) IF (GHORELAX_R) THEN - IRIMX=(KSIZELBXR_ll-1)/2 - IRIMY= (KSIZELBYR_ll-1)/2 - IL3DX=2*ILBSIZEX+2 - IL3DY=2*ILBSIZEY+2 + IRIMX=(KSIZELBXR_ll-2*JPHEXT)/2 + IRIMY= (KSIZELBYR_ll-2*JPHEXT)/2 + IL3DX=2*ILBSIZEX+2*JPHEXT + IL3DY=2*ILBSIZEY+2*JPHEXT ELSE IRIMX=0 IRIMY=0 - IL3DX=2 - IL3DY=2 + IL3DX=2*JPHEXT ! 2 + IL3DY=2*JPHEXT ! 2 END IF ! IRR=0 @@ -494,15 +496,15 @@ IF (KSV > 0) THEN YDIR='--' CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,GHORELAX_SV,IGRID,ILENCH,YCOMMENT,IRESP) IF ( GHORELAX_SV ) THEN - IRIMX=(KSIZELBXSV_ll-1)/2 - IRIMY=(KSIZELBYSV_ll-1)/2 - IL3DX=2*ILBSIZEX+2 - IL3DY=2*ILBSIZEY+2 + IRIMX=(KSIZELBXSV_ll-2*JPHEXT)/2 + IRIMY=(KSIZELBYSV_ll-2*JPHEXT)/2 + IL3DX=2*ILBSIZEX+2*JPHEXT + IL3DY=2*ILBSIZEY+2*JPHEXT ELSE IRIMX=0 IRIMY=0 - IL3DX=2 - IL3DY=2 + IL3DX=2*JPHEXT !2 + IL3DY=2*JPHEXT !2 END IF END IF END IF diff --git a/src/MNH/ini_les_cart_maskn.f90 b/src/MNH/ini_les_cart_maskn.f90 index e56746073..0a4912b08 100644 --- a/src/MNH/ini_les_cart_maskn.f90 +++ b/src/MNH/ini_les_cart_maskn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 les 2006/05/18 13:07:25 !----------------------------------------------------------------- !############################# MODULE MODI_INI_LES_CART_MASKn @@ -62,6 +61,7 @@ END MODULE MODI_INI_LES_CART_MASKn !! ------------- !! Original 07/02/00 !! Modification 01/02/01 (D.Gazen) add module MODD_NSV for NSV variable +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !! -------------------------------------------------------------------------- ! diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index edf141e03..fa4cdb140 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -262,6 +262,7 @@ END MODULE MODI_INI_MODEL_n !! P. Tulet Nov 2014 accumulated moles of aqueous species that fall at the surface !! JAn. 2015 (F. Brosse) bug in allocate XACPRAQ !! Dec 2014 (C.Lac) : For reproducibility START/RESTA +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !--------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -919,15 +920,15 @@ ELSEIF( L2D ) THEN ! 2D case IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2) ! IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2 - NSIZELBXU_ll=2*NRIMX+2 + NSIZELBX_ll=2*NRIMX+2*JPHEXT + NSIZELBXU_ll=2*NRIMX+2*JPHEXT ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU)) ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU)) ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,IKU)) ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) ELSE - NSIZELBX_ll=2 - NSIZELBXU_ll=4 + NSIZELBX_ll=2*JPHEXT ! 2 + NSIZELBXU_ll=2*(JPHEXT+1) ! 4 ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU)) ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU)) ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,IKU)) @@ -936,10 +937,10 @@ ELSEIF( L2D ) THEN ! 2D case ! IF (CTURB /= 'NONE') THEN IF ( LHORELAX_TKE) THEN - NSIZELBXTKE_ll=2* NRIMX+2 + NSIZELBXTKE_ll=2* NRIMX+2*JPHEXT ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU)) ELSE - NSIZELBXTKE_ll=2 + NSIZELBXTKE_ll=2*JPHEXT ! 2 ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU)) END IF ELSE @@ -951,10 +952,10 @@ ELSEIF( L2D ) THEN ! 2D case IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & ) THEN - NSIZELBXR_ll=2* NRIMX+2 + NSIZELBXR_ll=2* NRIMX+2*JPHEXT ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR)) ELSE - NSIZELBXR_ll=2 + NSIZELBXR_ll=2*JPHEXT ! 2 ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR)) ENDIF ELSE @@ -964,10 +965,10 @@ ELSEIF( L2D ) THEN ! 2D case ! IF ( NSV > 0 ) THEN IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2* NRIMX+2 + NSIZELBXSV_ll=2* NRIMX+2*JPHEXT ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV)) ELSE - NSIZELBXSV_ll=2 + NSIZELBXSV_ll=2*JPHEXT ! 2 ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV)) END IF ELSE @@ -1012,10 +1013,10 @@ ELSE ! 3D case END IF END IF IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2 - NSIZELBXU_ll=2*NRIMX+2 - NSIZELBY_ll=2*NRIMY+2 - NSIZELBYV_ll=2*NRIMY+2 + NSIZELBX_ll=2*NRIMX+2*JPHEXT + NSIZELBXU_ll=2*NRIMX+2*JPHEXT + NSIZELBY_ll=2*NRIMY+2*JPHEXT + NSIZELBYV_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU)) ALLOCATE(XLBYUM(IISIZEYF,IJSIZEYF,IKU)) ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU)) @@ -1025,10 +1026,10 @@ IF ( LHORELAX_UVWTH ) THEN ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,IKU)) ELSE - NSIZELBX_ll=2 - NSIZELBXU_ll=4 - NSIZELBY_ll=2 - NSIZELBYV_ll=4 + NSIZELBX_ll=2*JPHEXT ! 2 + NSIZELBXU_ll=2*(JPHEXT+1) ! 4 + NSIZELBY_ll=2*JPHEXT ! 2 + NSIZELBYV_ll=2*(JPHEXT+1) ! 4 ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU)) ALLOCATE(XLBYUM(IISIZEY2,IJSIZEY2,IKU)) ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU)) @@ -1041,13 +1042,13 @@ IF ( LHORELAX_UVWTH ) THEN ! IF (CTURB /= 'NONE') THEN IF ( LHORELAX_TKE) THEN - NSIZELBXTKE_ll=2*NRIMX+2 - NSIZELBYTKE_ll=2*NRIMY+2 + NSIZELBXTKE_ll=2*NRIMX+2*JPHEXT + NSIZELBYTKE_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU)) ALLOCATE(XLBYTKEM(IISIZEYF,IJSIZEYF,IKU)) ELSE - NSIZELBXTKE_ll=2 - NSIZELBYTKE_ll=2 + NSIZELBXTKE_ll=2*JPHEXT ! 2 + NSIZELBYTKE_ll=2*JPHEXT ! 2 ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU)) ALLOCATE(XLBYTKEM(IISIZEY2,IJSIZEY2,IKU)) END IF @@ -1062,13 +1063,13 @@ IF ( LHORELAX_UVWTH ) THEN IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & ) THEN - NSIZELBXR_ll=2*NRIMX+2 - NSIZELBYR_ll=2*NRIMY+2 + NSIZELBXR_ll=2*NRIMX+2*JPHEXT + NSIZELBYR_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR)) ALLOCATE(XLBYRM(IISIZEYF,IJSIZEYF,IKU,NRR)) ELSE - NSIZELBXR_ll=2 - NSIZELBYR_ll=2 + NSIZELBXR_ll=2*JPHEXT ! 2 + NSIZELBYR_ll=2*JPHEXT ! 2 ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR)) ALLOCATE(XLBYRM(IISIZEY2,IJSIZEY2,IKU,NRR)) ENDIF @@ -1081,13 +1082,13 @@ IF ( LHORELAX_UVWTH ) THEN ! IF ( NSV > 0 ) THEN IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2*NRIMX+2 - NSIZELBYSV_ll=2*NRIMY+2 + NSIZELBXSV_ll=2*NRIMX+2*JPHEXT + NSIZELBYSV_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV)) ALLOCATE(XLBYSVM(IISIZEYF,IJSIZEYF,IKU,NSV)) ELSE - NSIZELBXSV_ll=2 - NSIZELBYSV_ll=2 + NSIZELBXSV_ll=2*JPHEXT ! 2 + NSIZELBYSV_ll=2*JPHEXT ! 2 ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV)) ALLOCATE(XLBYSVM(IISIZEY2,IJSIZEY2,IKU,NSV)) END IF diff --git a/src/MNH/ini_one_wayn.f90 b/src/MNH/ini_one_wayn.f90 index bad3b6c05..d1a3f7ca4 100644 --- a/src/MNH/ini_one_wayn.f90 +++ b/src/MNH/ini_one_wayn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 init 2006/10/16 14:23:23 !----------------------------------------------------------------- ! ####################### MODULE MODI_INI_ONE_WAY_n @@ -141,6 +140,7 @@ SUBROUTINE INI_ONE_WAY_n(KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT, & !! M. Leriche 11/2009 modify the LB*SVS for the aqueous phase chemistry !! 07/2010 idem for ice phase chemical species !! Bosseur & Filippi 07/2013 Adds Forefire +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------ ! @@ -240,10 +240,10 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMMI ! chemical ice phase concentra CALL GOTO_MODEL(KDAD) ! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -IIB=IIB-1 -IIE=IIE+1 -IJB=IJB-1 -IJE=IJE+1 +IIB=IIB-JPHEXT +IIE=IIE+JPHEXT +IJB=IJB-JPHEXT +IJE=IJE+JPHEXT ALLOCATE(ZWORK(IIB:IIE,IJB:IJE,SIZE(PLBXTHM,3))) ! can be smaller than child extended subdomain ! LS_FORCING routine can not correctly manage extra halo zone ! LB will be filled only with one layer halo zone for the moment @@ -818,7 +818,7 @@ ENDIF !* Vertical interpolation ! IF ( SIZE(PLBX,1) /= 0 .AND. GVERT_INTERP) THEN - IF ( ILBX == KRIMX+1 ) THEN + IF ( ILBX == KRIMX+JPHEXT ) THEN PLBX(:,:,:) = VER_INTERP_LIN(PLBX(:,:,:), & KKLIN_LBXM(:,:,:),PCOEFLIN_LBXM(:,:,:)) ELSE @@ -828,7 +828,7 @@ IF ( SIZE(PLBX,1) /= 0 .AND. GVERT_INTERP) THEN END IF ! IF ( SIZE(PLBY,1) /= 0 .AND. GVERT_INTERP) THEN - IF ( ILBY == KRIMY+1 ) THEN + IF ( ILBY == KRIMY+JPHEXT ) THEN PLBY(:,:,:) = VER_INTERP_LIN(PLBY(:,:,:), & KKLIN_LBYM(:,:,:),PCOEFLIN_LBYM(:,:,:)) ELSE diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90 index 5d6346549..6f36ce8f7 100644 --- a/src/MNH/ini_prog_var.f90 +++ b/src/MNH/ini_prog_var.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/09/25 14:23:42 !----------------------------------------------------------------- ! ######################## MODULE MODI_INI_PROG_VAR @@ -95,6 +94,7 @@ END MODULE MODI_INI_PROG_VAR !! another MesoNH simulation !! Aug 2012 (J.-P. Chaboureau) read the chem-file descriptor !! Fev 2015 (J.-P. Chaboureau) read instant T insteed of M +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -165,11 +165,8 @@ LOGICAL :: GFOUND ! Return code when searching namelist CALL GET_MODEL_NUMBER_ll(IMI) CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) ! -IIB=JPHEXT+1 -IIE=SIZE(XWT,1)-JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IIU=SIZE(XWT,1) -IJB=JPHEXT+1 -IJE=SIZE(XWT,2)-JPHEXT IJU=SIZE(XWT,2) IKU=SIZE(XWT,3) IIU_ll=NIMAX_ll + 2 * JPHEXT @@ -424,19 +421,19 @@ ENDIF ! HCHEMFILE ! IF (CTURB /= 'NONE') THEN IF ( LHORELAX_TKE) THEN - ALLOCATE(XLBXTKEM(2*NRIMX+2,IJU,IKU)) - ALLOCATE(XLBYTKEM(IIU,2*NRIMY+2,IKU)) + ALLOCATE(XLBXTKEM(2*NRIMX+2*JPHEXT,IJU,IKU)) + ALLOCATE(XLBYTKEM(IIU,2*NRIMY+2*JPHEXT,IKU)) ELSE - ALLOCATE(XLBXTKEM(2,IJU,IKU)) - ALLOCATE(XLBYTKEM(IIU,2,IKU)) + ALLOCATE(XLBXTKEM(2*JPHEXT,IJU,IKU)) + ALLOCATE(XLBYTKEM(IIU,2*JPHEXT,IKU)) END IF ! - ILBX=SIZE(XLBXTKEM,1)/2-1 - XLBXTKEM(1:ILBX+1,:,:) = XTKET(IIB-1:IIB-1+ILBX,:,:) - XLBXTKEM(ILBX+2:2*ILBX+2,:,:) = XTKET(IIE+1-ILBX:IIE+1,:,:) - ILBY=SIZE(XLBYTKEM,2)/2-1 - XLBYTKEM(:,1:ILBY+1,:) = XTKET(:,IJB-1:IJB-1+ILBY,:) - XLBYTKEM(:,ILBY+2:2*ILBY+2,:) = XTKET(:,IJE+1-ILBY:IJE+1,:) + ILBX=SIZE(XLBXTKEM,1)/2-JPHEXT + XLBXTKEM(1:ILBX+JPHEXT,:,:) = XTKET(1:ILBX+JPHEXT,:,:) + XLBXTKEM(ILBX+JPHEXT+1:2*ILBX+2*JPHEXT,:,:) = XTKET(IIE+1-ILBX:IIE+JPHEXT,:,:) + ILBY=SIZE(XLBYTKEM,2)/2-JPHEXT + XLBYTKEM(:,1:ILBY+JPHEXT,:) = XTKET(:,1:ILBY+JPHEXT,:) + XLBYTKEM(:,ILBY+JPHEXT+1:2*ILBY+2*JPHEXT,:) = XTKET(:,IJE+1-ILBY:IJE+JPHEXT,:) ELSE ALLOCATE(XLBXTKEM(0,0,0)) ALLOCATE(XLBYTKEM(0,0,0)) @@ -444,19 +441,19 @@ END IF ! IF ( NSV > 0 ) THEN IF ( ANY( LHORELAX_SV(:)) ) THEN - ALLOCATE(XLBXSVM(2*NRIMX+2,IJU,IKU,NSV)) - ALLOCATE(XLBYSVM(IIU,2*NRIMY+2,IKU,NSV)) + ALLOCATE(XLBXSVM(2*NRIMX+2*JPHEXT,IJU,IKU,NSV)) + ALLOCATE(XLBYSVM(IIU,2*NRIMY+2*JPHEXT,IKU,NSV)) ELSE - ALLOCATE(XLBXSVM(2,IJU,IKU,NSV)) - ALLOCATE(XLBYSVM(IIU,2,IKU,NSV)) + ALLOCATE(XLBXSVM(2*JPHEXT,IJU,IKU,NSV)) + ALLOCATE(XLBYSVM(IIU,2*JPHEXT,IKU,NSV)) END IF ! - ILBX=SIZE(XLBXSVM,1)/2-1 - XLBXSVM(1:ILBX+1,:,:,:) = XSVT(IIB-1:IIB-1+ILBX,:,:,:) - XLBXSVM(ILBX+2:2*ILBX+2,:,:,:) = XSVT(IIE+1-ILBX:IIE+1,:,:,:) - ILBY=SIZE(XLBYSVM,2)/2-1 - XLBYSVM(:,1:ILBY+1,:,:) = XSVT(:,IJB-1:IJB-1+ILBY,:,:) - XLBYSVM(:,ILBY+2:2*ILBY+2,:,:) = XSVT(:,IJE+1-ILBY:IJE+1,:,:) + ILBX=SIZE(XLBXSVM,1)/2-JPHEXT + XLBXSVM(1:ILBX+JPHEXT,:,:,:) = XSVT(1:ILBX+JPHEXT,:,:,:) + XLBXSVM(ILBX+JPHEXT+1:2*ILBX+2*JPHEXT,:,:,:) = XSVT(IIE+1-ILBX:IIE+JPHEXT,:,:,:) + ILBY=SIZE(XLBYSVM,2)/2-JPHEXT + XLBYSVM(:,1:ILBY+JPHEXT,:,:) = XSVT(:,1:ILBY+JPHEXT,:,:) + XLBYSVM(:,ILBY+JPHEXT+1:2*ILBY+2*JPHEXT,:,:) = XSVT(:,IJE+1-ILBY:IJE+JPHEXT,:,:) ELSE ALLOCATE(XLBXSVM(0,0,0,0)) ALLOCATE(XLBYSVM(0,0,0,0)) diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90 index dc4140b6c..38743f514 100644 --- a/src/MNH/ini_segn.f90 +++ b/src/MNH/ini_segn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:27 !----------------------------------------------------------------- ! ################### MODULE MODI_INI_SEG_n @@ -161,6 +160,7 @@ END MODULE MODI_INI_SEG_n !! 02/2012 add GFOREFIRE (Pialat/Tulet) !! 05/2014 missing reading of IMASDEV before COUPLING !! test (Escobar) +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS diff --git a/src/MNH/ini_size_spawn.f90 b/src/MNH/ini_size_spawn.f90 index c6e9e1d7d..0d9368494 100644 --- a/src/MNH/ini_size_spawn.f90 +++ b/src/MNH/ini_size_spawn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 spawn 2006/05/23 15:45:38 !----------------------------------------------------------------- !######################### MODULE MODI_INI_SIZE_SPAWN @@ -65,6 +64,7 @@ END MODULE MODI_INI_SIZE_SPAWN !! ------------- !! !! Original 13/07/99 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -272,20 +272,20 @@ END IF ! !* 1.5 Position of model 2 domain relative to model 1 ! -NXEND = NXOR + JPHEXT + NXSIZE -NYEND = NYOR + JPHEXT + NYSIZE +NXEND = NXOR + NXSIZE +2*JPHEXT -1 +NYEND = NYOR + NYSIZE +2*JPHEXT -1 ! !* 1.6 model 2 LBC (caution: implicitely JPHEXT = 1) ! CLBCX(:) = 'OPEN' -IF (NXOR == 1 .AND. NXEND == DIM_MODEL(1)%NIMAX_ll+2) CLBCX(:) = HLBCX(:) +IF (NXOR == 1 .AND. NXEND == DIM_MODEL(1)%NIMAX_ll+2*JPHEXT) CLBCX(:) = HLBCX(:) IF (NXOR == 1 .AND. HLBCX(1) == 'WALL') CLBCX(1) = 'WALL' -IF (NXEND == DIM_MODEL(1)%NIMAX_ll+2 .AND. HLBCX(2) == 'WALL') CLBCX(2) = 'WALL' +IF (NXEND == DIM_MODEL(1)%NIMAX_ll+2*JPHEXT .AND. HLBCX(2) == 'WALL') CLBCX(2) = 'WALL' ! CLBCY(:) = 'OPEN' -IF (NYOR == 1 .AND. NYEND == DIM_MODEL(1)%NJMAX_ll+2) CLBCY(:) = HLBCY(:) +IF (NYOR == 1 .AND. NYEND == DIM_MODEL(1)%NJMAX_ll+2*JPHEXT) CLBCY(:) = HLBCY(:) IF (NYOR == 1 .AND. HLBCY(1) == 'WALL') CLBCY(1) = 'WALL' -IF (NYEND == DIM_MODEL(1)%NJMAX_ll+2 .AND. HLBCY(2) == 'WALL') CLBCY(2) = 'WALL' +IF (NYEND == DIM_MODEL(1)%NJMAX_ll+2*JPHEXT .AND. HLBCY(2) == 'WALL') CLBCY(2) = 'WALL' ! ! !* 2 CALL OF INITIALIZATION PARALLEL ROUTINES diff --git a/src/MNH/ini_sizen.f90 b/src/MNH/ini_sizen.f90 index aeacf0606..3a94236b6 100644 --- a/src/MNH/ini_sizen.f90 +++ b/src/MNH/ini_sizen.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:27 !----------------------------------------------------------------- ! ################# MODULE MODI_INI_SIZE_n @@ -100,6 +99,7 @@ END MODULE MODI_INI_SIZE_n !! Oct. 10 2001 (I. Mallet) allow namelists in different orders !! Jan. 2004 (V. Masson) externalization of surface !! June 2006 (D. Gazen) _n: no more read of updated var. +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -151,6 +151,7 @@ INTEGER :: IGRID ! C-grid indicator in LFIFM file INTEGER :: ILENCH ! Length of comment string in LFIFM file CHARACTER (LEN=100) :: YCOMMENT! comment string in LFIFM file CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file +INTEGER :: IJPHEXT ! !------------------------------------------------------------------------------- ! @@ -226,6 +227,22 @@ YRECFM='KMAX' YDIR='--' CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NKMAX,IGRID,ILENCH,YCOMMENT,IRESP) ! +YRECFM='JPHEXT' +YDIR='--' +CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,IJPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) +! +IF ( IJPHEXT .NE. JPHEXT ) THEN + WRITE(ILUOUT,FMT=*) ' INI_SIZE_N : JPHEXT in namelist NAM_CONF ( or default or .des value )& + & JPHEXT=',JPHEXT + WRITE(ILUOUT,FMT=*)' different from LFI file=',HINIFILE ,' value JPHEXT=',IJPHEXT + WRITE(ILUOUT,FMT=*) '-> JOB ABORTED' + CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + !WRITE(NLUOUT,FMT=*) ' JPHEXT HAS BEEN SET TO ', IJPHEXT + !IJPHEXT = JPHEXT +END IF +! IF (KMI == 1) THEN ! special initialisation for the outer model NDXRATIO_ALL(KMI) = 1 NDYRATIO_ALL(KMI) = 1 @@ -249,8 +266,8 @@ IF (LEN_TRIM(CDAD_NAME(KMI))>0) THEN CALL FMREAD(HINIFILE,'DYRATIO',HLUOUT,YDIR,NDYRATIO_ALL(KMI),IGRID,ILENCH,YCOMMENT,IRESP) CALL FMREAD(HINIFILE,'XOR',HLUOUT,YDIR,NXOR_ALL(KMI),IGRID,ILENCH,YCOMMENT,IRESP) CALL FMREAD(HINIFILE,'YOR',HLUOUT,YDIR,NYOR_ALL(KMI),IGRID,ILENCH,YCOMMENT,IRESP) - NXEND_ALL(KMI)=NXOR_ALL(KMI)+NIMAX_ll/NDXRATIO_ALL(KMI)+JPHEXT - NYEND_ALL(KMI)=NYOR_ALL(KMI)+NJMAX_ll/NDYRATIO_ALL(KMI)+JPHEXT + NXEND_ALL(KMI)=NXOR_ALL(KMI)-1 + NIMAX_ll/NDXRATIO_ALL(KMI) +2*JPHEXT + NYEND_ALL(KMI)=NYOR_ALL(KMI)-1 + NJMAX_ll/NDYRATIO_ALL(KMI) +2*JPHEXT ELSE NDXRATIO_ALL(KMI)=1 NDYRATIO_ALL(KMI)=1 diff --git a/src/MNH/ini_spawn_lsn.f90 b/src/MNH/ini_spawn_lsn.f90 index ac69e12ad..f2a63d23e 100644 --- a/src/MNH/ini_spawn_lsn.f90 +++ b/src/MNH/ini_spawn_lsn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 init 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ######################### MODULE MODI_INI_SPAWN_LS_n @@ -139,6 +138,7 @@ END MODULE MODI_INI_SPAWN_LS_n !! 22/01/98 ( J. Stein ) add the vertical interpolation !! 09/07/98 ( J. Stein ) bug in the storage of the interp !! coeff for U +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -160,6 +160,8 @@ USE MODI_COEF_VER_INTERP_LIN USE MODI_VER_INTERP_LIN USE MODI_VERT_COORD ! +USE MODE_MPPDB +! IMPLICIT NONE ! !* 0.1 declarations of arguments @@ -236,10 +238,10 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTZSMT,ZZSMT CALL GOTO_MODEL(KDAD) ! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -IIB=IIB-1 -IIE=IIE+1 -IJB=IJB-1 -IJE=IJE+1 +IIB=IIB-JPHEXT +IIE=IIE+JPHEXT +IJB=IJB-JPHEXT +IJE=IJE+JPHEXT ! !* 1 GATHER LS FIELD FOR THE CHILD MODEL KMI ! @@ -320,6 +322,7 @@ IF ( GVERT_INTERP ) THEN PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & HLBCX,HLBCY,ZTZS,ZZSLS(IIB:IIE,IJB:IJE,:) ) + CALL MPPDB_CHECK3D(ZZSLS,"INI_SPAWN_LS::ZZSLS",PRECISION) ! ZZSMTLS=0. CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & @@ -560,6 +563,8 @@ CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,2, & HLBCX,HLBCY,ZTLSUM,PLSUM(IIB:IIE,IJB:IJE,:)) +CALL MPPDB_CHECK3D(PLSUM,"INI_SPAWN_LS::PLSUM",PRECISION) + ! IF ( SIZE(PLSUS,1) /= 0 ) THEN ! diff --git a/src/MNH/interp3d.f90 b/src/MNH/interp3d.f90 index dd1806a86..b5c2faa9d 100644 --- a/src/MNH/interp3d.f90 +++ b/src/MNH/interp3d.f90 @@ -6,9 +6,7 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 convert 2006/05/18 13:07:25 !----------------------------------------------------------------- -! ######spl MODULE MODI_INTERP3D !################################# ! @@ -59,6 +57,7 @@ END MODULE MODI_INTERP3D !! MODIFICATIONS !! ------------- !! Original 21/03/97 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -94,13 +93,10 @@ INTEGER :: IKU ! !* 1. ! ------------ +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IPU=SIZE(PFIELDAP,3) IKB=1 +JPVEXT IKU=SIZE(XZHAT) -IIB=JPHEXT+1 -IIE=NIMAX+JPHEXT -IJB=JPHEXT+1 -IJE=NJMAX+JPHEXT ZDIXEPS=10.*EPSILON(1.) ! SELECT CASE (KGRID) diff --git a/src/MNH/ion_attach_elec.f90 b/src/MNH/ion_attach_elec.f90 index bf4409491..670113ae4 100644 --- a/src/MNH/ion_attach_elec.f90 +++ b/src/MNH/ion_attach_elec.f90 @@ -74,6 +74,7 @@ END MODULE MODI_ION_ATTACH_ELEC !! ------------- !! Original 2010 !! Modifications: +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -91,6 +92,7 @@ USE MODD_RAIN_ICE_PARAM USE MODD_NSV, ONLY : NSV_ELECBEG, NSV_ELEC USE MODD_BUDGET, ONLY : LBU_RSV USE MODD_REF, ONLY : XTHVREFZ +USE MODE_ll ! USE MODI_BUDGET USE MODI_MOMG @@ -149,10 +151,7 @@ REAL :: ZCOMB ! Recombination ZCQD = 4 * XPI * XEPSILON * XBOLTZ / XECHARGE ZCDIF = XBOLTZ /XECHARGE ! -IIB = 1 + JPHEXT -IIE = SIZE(PTHT,1) - JPHEXT -IJB = 1 + JPHEXT -IJE = SIZE(PTHT,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKE = SIZE(PTHT,3) - JPVEXT ! diff --git a/src/MNH/ion_bound4drift.f90 b/src/MNH/ion_bound4drift.f90 index 8915f9f90..0c2454557 100644 --- a/src/MNH/ion_bound4drift.f90 +++ b/src/MNH/ion_bound4drift.f90 @@ -54,6 +54,7 @@ END MODULE MODI_ION_BOUND4DRIFT !! AUTHOR !! ------ !! M. Chong 12/2010 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -89,10 +90,7 @@ INTEGER :: IJB, IJE ! index of first and last inner mass points along y ! ---------------------------------------------- ! ! beginning and end indexes of the physical subdomain -IIB = 1 + JPHEXT -IIE = SIZE(PEFIELDU,1) - JPHEXT -IJB = 1 + JPHEXT -IJE = SIZE(PEFIELDU,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/ion_drift.f90 b/src/MNH/ion_drift.f90 index 040bcd971..438dcb8bf 100644 --- a/src/MNH/ion_drift.f90 +++ b/src/MNH/ion_drift.f90 @@ -40,6 +40,7 @@ END MODULE MODI_ION_DRIFT !! AUTHOR !! ------ !! M. Chong 01/2010 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -118,10 +119,7 @@ CALL MYPROC_ELEC_ll (IPROC) ! ---------------------------------------------- ! ! beginning and end indexes of the physical subdomain -IIB = 1 + JPHEXT -IIE = SIZE(PSVT,1) - JPHEXT -IJB = 1 + JPHEXT -IJE = SIZE(PSVT,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKE = SIZE(PSVT,3) - JPVEXT IKU = SIZE(PSVT,3) diff --git a/src/MNH/khko_notadjust.f90 b/src/MNH/khko_notadjust.f90 index 485f0d4ce..ce3bddccc 100644 --- a/src/MNH/khko_notadjust.f90 +++ b/src/MNH/khko_notadjust.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 microph 2007/03/23 11:52:41 !----------------------------------------------------------------- ! ########################## MODULE MODI_KHKO_NOTADJUST @@ -92,6 +91,7 @@ END MODULE MODI_KHKO_NOTADJUST !! !! MODIFICATIONS !! ------------- +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -192,10 +192,7 @@ INTEGER :: JK ! For loop ! ------------- ! CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) -IIB=1+JPHEXT -IIE=SIZE(PZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PZZ,3) - JPVEXT ! diff --git a/src/MNH/lidar.f90 b/src/MNH/lidar.f90 index 32d0bd410..eb64a5fca 100644 --- a/src/MNH/lidar.f90 +++ b/src/MNH/lidar.f90 @@ -83,6 +83,7 @@ END MODULE MODI_LIDAR !! Original 04/10/07 !! JP Chaboureau 12/02/10 change dust refraction index !! add inputs (lidar charact. and cloud fraction) +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -104,6 +105,7 @@ USE MODD_ICE_C1R3_DESCR, ONLY : XLBEXI, & ! USE MODI_BHMIE_WATER ! Gamma or mono dispersed size distributions USE MODI_BHMIE_AEROSOLS ! Lognormal or mono dispersed size distributions +USE MODE_ll ! IMPLICIT NONE ! @@ -203,10 +205,7 @@ REAL :: ZLBEXR !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PRHO,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PRHO,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PRHO,3) - JPVEXT ! diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90 index cc9942d87..834639429 100644 --- a/src/MNH/mesonh.f90 +++ b/src/MNH/mesonh.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/22 10:53:31 !----------------------------------------------------------------- ! ############## PROGRAM MESONH @@ -77,6 +76,7 @@ !! remplaced by infinite loop !! J.Escobar 19/03/2008 rename INIT to INIT_MNH --> grib problem !! J.Escobar 6/11/2014 remove test on LCHECK otherwise never call MPPDB_INIT +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -166,7 +166,6 @@ END DO ! IF (LCHECK) THEN CALL MPPDB_BARRIER() - CALL MPPDB_BARRIER() ELSE CALL END_PARA_ll(IINFO_ll) END IF diff --git a/src/MNH/mnhopen_aux_io_surf.f90 b/src/MNH/mnhopen_aux_io_surf.f90 index f92124d58..3743e523f 100644 --- a/src/MNH/mnhopen_aux_io_surf.f90 +++ b/src/MNH/mnhopen_aux_io_surf.f90 @@ -47,6 +47,7 @@ END MODULE MODI_MNHOPEN_AUX_IO_SURF !! MODIFICATIONS !! ------------- !! Original 09/2003 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -91,6 +92,7 @@ INTEGER :: IJMAX ! number of points in Y direction ! INTEGER :: ILU ! 1D physical dimension of XCOVER REAL, DIMENSION(:), ALLOCATABLE :: ZFULL ! total cover +INTEGER :: IJPHEXT !------------------------------------------------------------------------------- !------------------------------------------------------------------------------- ! WARNING : this routine works only on ONE processor jobs @@ -129,6 +131,17 @@ COUTFILE = HFILE ! CALL FMREAD(HFILE,'IMAX',COUT,'--',IIMAX,IGRID,ILENCH,YCOMMENT,IRESP) CALL FMREAD(HFILE,'JMAX',COUT,'--',IJMAX,IGRID,ILENCH,YCOMMENT,IRESP) +CALL FMREAD(HFILE,'JPHEXT',COUT,'--',IJPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) +IF ( IJPHEXT .NE. JPHEXT ) THEN + WRITE(NLUOUT,FMT=*) ' MNHOPEN_AUX_IO : JPHEXT in PRE_PGD1.nam/NAM_CONF_PGD ( or default value )& + JPHEXT=',JPHEXT + WRITE(NLUOUT,FMT=*) ' different from PGD files=',HFILE ,' value JPHEXT=',IJPHEXT + WRITE(NLUOUT,FMT=*) '-> JOB ABORTED' + CALL CLOSE_ll(COUT,IOSTAT=IRESP) + CALL ABORT + STOP +END IF +! NIU_ALL = (IIMAX+2*JPHEXT) NJU_ALL = (IJMAX+2*JPHEXT) NIB_ALL = 1 + JPHEXT diff --git a/src/MNH/modd_conf.f90 b/src/MNH/modd_conf.f90 index bd2bd2abd..24c36a3c1 100644 --- a/src/MNH/modd_conf.f90 +++ b/src/MNH/modd_conf.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:27 !----------------------------------------------------------------- ! ################# MODULE MODD_CONF @@ -50,6 +49,7 @@ !! P. Jabouille 18/04/02 add NBUGFIX and CBIBUSER !! C. Lac 01/04/14 add LCHECK !! G. Tanguy 01/04/14 add LCOUPLING +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -109,6 +109,8 @@ CHARACTER(LEN=6),SAVE :: CPROGRAM ! CPROGRAM is the program currently running: ! INTEGER,SAVE :: NHALO ! Size of the halo for parallel distribution ! +!INTEGER,SAVE :: JPHEXT = 1 ! Horizontal External points number +! CHARACTER (LEN=10),SAVE :: CSPLIT ! kind of domain splitting for parallel distribution ! "BSPLITTING","XSPLITTING","YSPLITTING" LOGICAL,SAVE :: LLG ! Logical to use lagrangian variables diff --git a/src/MNH/modd_parameters.f90 b/src/MNH/modd_parameters.f90 index 18d193a7f..4eee85095 100644 --- a/src/MNH/modd_parameters.f90 +++ b/src/MNH/modd_parameters.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! ###################### MODULE MODD_PARAMETERS @@ -42,6 +41,7 @@ !! Modification 22/01/01 (D.Gazen) change JPSVMAX from 100 to 200 !! and JPBUMAX from 120 to 250 !! Modification 17/05/04 (P.Jabouille) add JPOUTMAX +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -49,7 +49,11 @@ ! IMPLICIT NONE ! -INTEGER, PARAMETER :: JPHEXT = 1 ! Horizontal External points number +!JUAN CYCLK +!INTEGER, PARAMETER :: JPHEXT = 3 ! Horizontal External points number +INTEGER,SAVE :: JPHEXT = 1 ! Horizontal External points number +! +!JUAN CYCLK INTEGER, PARAMETER :: JPVEXT = 1 ! Vertical External points number INTEGER, PARAMETER :: JPVEXT_TURB = 1 ! Vertical External points number INTEGER, PARAMETER :: JPMODELMAX = 8 ! Maximum allowed number of nested models diff --git a/src/MNH/mode_gridcart.f90 b/src/MNH/mode_gridcart.f90 index c76afc4ed..afd145ac1 100644 --- a/src/MNH/mode_gridcart.f90 +++ b/src/MNH/mode_gridcart.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/29 16:49:15 !----------------------------------------------------------------- ! #################### MODULE MODE_GRIDCART @@ -37,6 +36,7 @@ !! MODIFICATIONS !! ------------- !! Original 06/05/94 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !-------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -164,12 +164,9 @@ CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) ! IIU = UBOUND(PXHAT,1) IJU = UBOUND(PYHAT,1) -IKU = UBOUND(PZHAT,1) -IIE = IIU-JPHEXT -IJE = IJU-JPHEXT +IKU = UBOUND(PZHAT,1) +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKE = IKU-JPVEXT -IIB = 1+JPHEXT -IJB = 1+JPHEXT IKB = 1+JPVEXT NULLIFY(TZHALO1_ll) ! diff --git a/src/MNH/mode_interpol_beam.f90 b/src/MNH/mode_interpol_beam.f90 index 8205b8c6d..6c16a7a8f 100644 --- a/src/MNH/mode_interpol_beam.f90 +++ b/src/MNH/mode_interpol_beam.f90 @@ -41,6 +41,7 @@ !! MODIFICATIONS !! ------------- !! Original 29/03/04 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !----------------------------------------------------------------- USE MODD_RADAR, ONLY: NBRAD,NBELEV,NBAZIM,NBSTEPMAX,NPTS_H,NPTS_V @@ -70,6 +71,7 @@ CONTAINS USE MODD_PARAMETERS USE MODD_GRID_n + USE MODE_ll ! IMPLICIT NONE ! @@ -102,11 +104,8 @@ CONTAINS IIU=SIZE(PZM,1) IJU=SIZE(PZM,2) IKU=SIZE(PZM,3) - IIB = JPHEXT + 1 - IJB = JPHEXT + 1 + CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = JPVEXT + 1 - IIE = IIU - JPHEXT - IJE = IJU - JPHEXT IKE = IKU - JPVEXT ! @@ -180,6 +179,7 @@ CONTAINS USE MODD_PARAMETERS USE MODD_GRID_n + USE MODE_ll ! IMPLICIT NONE ! @@ -219,11 +219,8 @@ CONTAINS IIU=SIZE(PZM,1) IJU=SIZE(PZM,2) IKU=SIZE(PZM,3) - IIB = JPHEXT + 1 - IJB = JPHEXT + 1 + CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = JPVEXT + 1 - IIE = IIU - JPHEXT - IJE = IJU - JPHEXT IKE = IKU - JPVEXT ! DO JAZ=1, INBAZIM diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 6f2dca219..59261da34 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -231,6 +231,7 @@ END MODULE MODI_MODEL_n !! J.Escobar 20/04/2015: missing UPDATE_HALO before UPDATE_HALO2 !! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for !! aircraft, ballon and profiler +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -834,7 +835,9 @@ ZTIME1=ZTIME2 IF( LLG .AND. IMI==1 ) CALL SETLB_LG ! IF (CCONF == "START" .OR. (CCONF == "RESTA" .AND. KTCOUNT /= 1 )) THEN - CALL BOUNDARIES ( & +CALL MPPDB_CHECK3DM("before BOUNDARIES:XUT, XVT, XWT, XTHT, XTKET",PRECISION,& + & XUT, XVT, XWT, XTHT, XTKET) +CALL BOUNDARIES ( & XTSTEP,CLBCX,CLBCY,NRR,NSV,KTCOUNT, & XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM, & XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM, & @@ -842,7 +845,9 @@ IF (CCONF == "START" .OR. (CCONF == "RESTA" .AND. KTCOUNT /= 1 )) THEN XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS, & XRHODJ, & XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT ) -END IF +CALL MPPDB_CHECK3DM("after BOUNDARIES:XUT, XVT, XWT, XTHT, XTKET",PRECISION,& + & XUT, XVT, XWT, XTHT, XTKET) +END IF ! CALL SECOND_MNH2(ZTIME2) ! @@ -1445,6 +1450,8 @@ XTIME_LES_BU_PROCESS = 0. ! ! ! +CALL MPPDB_CHECK3DM("before ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ",PRECISION,& + & XUT, XVT, XWT, XTHT, XTKET,XRHODJ) CALL ADVECTION_METSV ( CLUOUT, YFMFILE, GCLOSE_OUT,CUVW_ADV_SCHEME, & CMET_ADV_SCHEME, CSV_ADV_SCHEME, NSPLIT, & LSPLIT_CFL, XSPLIT_CFL, LCFL_WRIT, & @@ -1453,6 +1460,8 @@ XTIME_LES_BU_PROCESS = 0. XTHVREF, XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY, & XRTHS, XRRS, XRTKES, XRSVS, & XRTHS_CLD, XRRS_CLD, XRSVS_CLD, XRTKEMS ) +CALL MPPDB_CHECK3DM("after ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ ",PRECISION,& + & XUT, XVT, XWT, XTHT, XTKET,XRHODJ) ! CALL SECOND_MNH2(ZTIME2) ! @@ -1482,6 +1491,9 @@ ZTIME1 = ZTIME2 XTIME_BU_PROCESS = 0. XTIME_LES_BU_PROCESS = 0. ! +!MPPDB_CHECK_LB=.TRUE. +CALL MPPDB_CHECK3DM("before ADVEC_UVW:XU/V/W/TH/TKE/T,XRHODJ,XRU/V/Ws",PRECISION,& + & XUT, XVT, XWT, XTHT, XTKET,XRHODJ,XRUS,XRVS,XRWS) IF (CUVW_ADV_SCHEME(1:3)=='CEN') THEN IF (CUVW_ADV_SCHEME=='CEN4TH') THEN NULLIFY(TZFIELDC_ll) @@ -1518,6 +1530,9 @@ ELSE XRUS_PRES, XRVS_PRES, XRWS_PRES ) END IF ! +CALL MPPDB_CHECK3DM("after ADVEC_UVW:XU/V/W/TH/TKE/T,XRHODJ,XRU/V/Ws",PRECISION,& + & XUT, XVT, XWT, XTHT, XTKET,XRHODJ,XRUS,XRVS,XRWS) +!MPPDB_CHECK_LB=.FALSE. ! CALL SECOND_MNH2(ZTIME2) ! diff --git a/src/MNH/modn_conf.f90 b/src/MNH/modn_conf.f90 index 319996596..50298fa9e 100644 --- a/src/MNH/modn_conf.f90 +++ b/src/MNH/modn_conf.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 modn 2006/06/23 10:47:05 !----------------------------------------------------------------- ! ################ MODULE MODN_CONF @@ -72,16 +71,19 @@ !! P Jabouille (21/07/99) add NHALO and CSPLIT !! P Jabouille (26/06/01) lagrangian variable management !! V Masson (03/01/05) suppress L1D,L2D,LPACK +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! USE MODD_CONF +USE MODD_PARAMETERS, ONLY : JPHEXT ! IMPLICIT NONE ! NAMELIST/NAM_CONF/CCONF,LFLAT,NMODEL,CEQNSYS,NVERB,CEXP,CSEG,LFORCING, & - NHALO,CSPLIT,LLG,LINIT_LG,CINIT_LG,LNOMIXLG,LCHECK + NHALO,CSPLIT,LLG,LINIT_LG,CINIT_LG,LNOMIXLG,LCHECK, & + JPHEXT ! END MODULE MODN_CONF diff --git a/src/MNH/num_diff.f90 b/src/MNH/num_diff.f90 index 3632d5cbf..7dc3b66c4 100644 --- a/src/MNH/num_diff.f90 +++ b/src/MNH/num_diff.f90 @@ -213,6 +213,7 @@ END MODULE MODI_NUM_DIFF !! 05/06 (C.Lac) Remove EPS !! 05/07 (C.Lac) Separation between variables !! 07/09 (C.Lac) Correction on budget calls +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -305,52 +306,52 @@ GTKEALLOC = SIZE(PTKEM,1) /= 0 ! IF (ONUMDIFU) THEN IGRID = 2 - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TPHALO2LIST TZHALO2LSLIST => TPHALO2LSLIST CALL NUM_DIFF_ALGO(PRUS, PUM, IGRID, MXM(PRHODJ), PDK2U, PDK4U, & PLSUM,TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) - ELSE - CALL NUM_DIFF_ALGO(PRUS, PUM, IGRID, MXM(PRHODJ), PDK2U, PDK4U, PLSUM ) - ENDIF +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRUS, PUM, IGRID, MXM(PRHODJ), PDK2U, PDK4U, PLSUM ) +!!$ ENDIF ! IGRID = 3 - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TZHALO2LIST%NEXT TZHALO2LSLIST => TZHALO2LSLIST%NEXT CALL NUM_DIFF_ALGO(PRVS, PVM, IGRID, MYM(PRHODJ), PDK2U, PDK4U, & PLSVM, TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) - ELSE - CALL NUM_DIFF_ALGO(PRVS, PVM, IGRID, MYM(PRHODJ), PDK2U, PDK4U, PLSVM ) - ENDIF +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRVS, PVM, IGRID, MYM(PRHODJ), PDK2U, PDK4U, PLSVM ) +!!$ ENDIF ! IGRID = 4 ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TZHALO2LIST%NEXT TZHALO2LSLIST => TZHALO2LSLIST%NEXT CALL NUM_DIFF_ALGO(PRWS, PWM, IGRID, MZM(1,IKU,1,PRHODJ), PDK2U, PDK4U, & PLSWM, TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) - ELSE - CALL NUM_DIFF_ALGO(PRWS, PWM, IGRID, MZM(1,IKU,1,PRHODJ), PDK2U, PDK4U, PLSWM ) - ENDIF +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRWS, PWM, IGRID, MZM(1,IKU,1,PRHODJ), PDK2U, PDK4U, PLSWM ) +!!$ ENDIF ENDIF ! IF (ONUMDIFTH) THEN IGRID = 1 ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TZHALO2LIST%NEXT TZHALO2LSLIST => TZHALO2LSLIST%NEXT IF (OZDIFFU) THEN ! call z-diffusion for potential temperature CALL NUM_DIFF_ALGO_Z(PRTHS, PTHM, IGRID, PRHODJ, & PDK2TH, PDK4TH, PLSTHM, & TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) - ELSE - CALL NUM_DIFF_ALGO(PRTHS, PTHM, IGRID, PRHODJ, & - PDK2TH, PDK4TH, PLSTHM, & - TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) - ENDIF +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRTHS, PTHM, IGRID, PRHODJ, & +!!$ PDK2TH, PDK4TH, PLSTHM, & +!!$ TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) +!!$ ENDIF ELSE IF (OZDIFFU) THEN ! call z-diffusion for potential temperature CALL NUM_DIFF_ALGO_Z(PRTHS, PTHM, IGRID, PRHODJ, & @@ -362,31 +363,31 @@ IF (ONUMDIFTH) THEN ENDIF ! IF ( GTKEALLOC ) THEN - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TZHALO2LIST%NEXT CALL NUM_DIFF_ALGO(PRTKES, PTKEM, IGRID, PRHODJ, & PDK2TH, PDK4TH, TPHALO2=TZHALO2LIST%HALO2) - ELSE - CALL NUM_DIFF_ALGO(PRTKES, PTKEM, IGRID, PRHODJ, PDK2TH, PDK4TH) - ENDIF +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRTKES, PTKEM, IGRID, PRHODJ, PDK2TH, PDK4TH) +!!$ ENDIF ENDIF ! ! Case with KRR moist variables ! IF(KRR >= 1) THEN - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TZHALO2LIST%NEXT TZHALO2LSLIST => TZHALO2LSLIST%NEXT IF (OZDIFFU) THEN ! call z-diffusion for wv mixing ratio CALL NUM_DIFF_ALGO_Z(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & PDK2TH, PDK4TH, & PLSRVM, TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) - ELSE - CALL NUM_DIFF_ALGO(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & - PDK2TH, PDK4TH, PLSRVM, & - TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) - ENDIF +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & +!!$ PDK2TH, PDK4TH, PLSRVM, & +!!$ TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) +!!$ ENDIF ELSE IF (OZDIFFU) THEN ! call z-diffusion for wv mixing ratio CALL NUM_DIFF_ALGO_Z(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & @@ -403,14 +404,14 @@ IF (ONUMDIFTH) THEN ! This might be added later (is CLW stored in JRR = 2?) ! DO JRR=2, KRR - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TZHALO2LIST%NEXT CALL NUM_DIFF_ALGO(PRRS(:,:,:,JRR), PRM(:,:,:,JRR), IGRID, PRHODJ, & PDK2TH, PDK4TH, TPHALO2=TZHALO2LIST%HALO2) - ELSE - CALL NUM_DIFF_ALGO(PRRS(:,:,:,JRR), PRM(:,:,:,JRR), IGRID, PRHODJ, & - PDK2TH, PDK4TH ) - ENDIF +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRRS(:,:,:,JRR), PRM(:,:,:,JRR), IGRID, PRHODJ, & +!!$ PDK2TH, PDK4TH ) +!!$ ENDIF ENDDO ! ENDIF @@ -418,14 +419,14 @@ ENDIF ! IF (ONUMDIFSV) THEN DO JSV=1,KSV - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN TZHALO2LIST => TZHALO2LIST%NEXT CALL NUM_DIFF_ALGO(PRSVS(:,:,:,JSV), PSVM(:,:,:,JSV), IGRID, PRHODJ,& PDK2SV, PDK4SV, TPHALO2=TZHALO2LIST%HALO2) - ELSE - CALL NUM_DIFF_ALGO(PRSVS(:,:,:,JSV), PSVM(:,:,:,JSV), IGRID, PRHODJ, & - PDK2SV, PDK4SV ) - ENDIF +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRSVS(:,:,:,JSV), PSVM(:,:,:,JSV), IGRID, PRHODJ, & +!!$ PDK2SV, PDK4SV ) +!!$ ENDIF ENDDO END IF ! @@ -586,28 +587,28 @@ SELECT CASE ( HLBCX(1) ) ! X direction LBC type: (1) for left side ! CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IW=IIB+1 IE=IIE-1 - ELSE - IW=IIB - IE=IIE - END IF +!!$ ELSE +!!$ IW=IIB +!!$ IE=IIE +!!$ END IF ! IF (PRESENT(PLSFIELD)) THEN ZPTBFIELD(IW-2:IE+2,IJB-1:IJE+1,:) = PFIELDM(IW-2:IE+2,IJB-1:IJE+1,:) - PLSFIELD(IW-2:IE+2,IJB-1:IJE+1,:) - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN ZPTBFIELD(IW-3,IJB-1:IJE+1,:) = TPHALO2%WEST(IJB-1:IJE+1,:) - TPHALO2LS%WEST(IJB-1:IJE+1,:) ZPTBFIELD(IE+3,IJB-1:IJE+1,:) = TPHALO2%EAST(IJB-1:IJE+1,:) - TPHALO2LS%EAST(IJB-1:IJE+1,:) - ENDIF +!!$ ENDIF ELSE ZPTBFIELD(IW-2:IE+2,IJB-1:IJE+1,:) = PFIELDM(IW-2:IE+2,IJB-1:IJE+1,:) - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN ZPTBFIELD(IW-3,IJB-1:IJE+1,:) = TPHALO2%WEST(IJB-1:IJE+1,:) ZPTBFIELD(IE+3,IJB-1:IJE+1,:) = TPHALO2%EAST(IJB-1:IJE+1,:) - ENDIF +!!$ ENDIF ENDIF ! @@ -623,33 +624,37 @@ CASE ('OPEN','WALL','NEST') IW=IIB+1 END IF ELSE - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IW=IIB+1 - ELSE - IW=IIB - ENDIF +!!$ ELSE +!!$ IW=IIB +!!$ ENDIF ENDIF - IF (LEAST_ll() .OR. NHALO == 1) THEN +!!$ IF (LEAST_ll() .OR. NHALO == 1) THEN IE=IIE-1 - ELSE - IE=IIE - END IF +!!$ ELSE +!!$ IE=IIE +!!$ END IF IF (PRESENT(PLSFIELD)) THEN ZPTBFIELD(IW-2:IE+2,IJB-1:IJE+1,:) = PFIELDM(IW-2:IE+2,IJB-1:IJE+1,:) - PLSFIELD(IW-2:IE+2,IJB-1:IJE+1,:) - IF((NHALO == 1).AND.(.NOT.LWEST_ll())) THEN +!!$ IF((NHALO == 1).AND.(.NOT.LWEST_ll())) THEN + IF(.NOT.LWEST_ll()) THEN ZPTBFIELD(IW-3,IJB-1:IJE+1,:) = TPHALO2%WEST(IJB-1:IJE+1,:) - TPHALO2LS%WEST(IJB-1:IJE+1,:) ENDIF - IF((NHALO == 1).AND.(.NOT.LEAST_ll())) THEN +!!$ IF((NHALO == 1).AND.(.NOT.LEAST_ll())) THEN + IF(.NOT.LEAST_ll()) THEN ZPTBFIELD(IE+3,IJB-1:IJE+1,:) = TPHALO2%EAST(IJB-1:IJE+1,:) - TPHALO2LS%EAST(IJB-1:IJE+1,:) ENDIF ELSE ZPTBFIELD(IW-2:IE+2,IJB-1:IJE+1,:) = PFIELDM(IW-2:IE+2,IJB-1:IJE+1,:) - IF((NHALO == 1).AND.(.NOT.LWEST_ll())) THEN +!!$ IF((NHALO == 1).AND.(.NOT.LWEST_ll())) THEN + IF(.NOT.LWEST_ll()) THEN ZPTBFIELD(IW-3,IJB-1:IJE+1,:) = TPHALO2%WEST(IJB-1:IJE+1,:) ENDIF - IF((NHALO == 1).AND.(.NOT.LEAST_ll())) THEN +!!$ IF((NHALO == 1).AND.(.NOT.LEAST_ll())) THEN + IF(.NOT.LEAST_ll()) THEN ZPTBFIELD(IE+3,IJB-1:IJE+1,:) = TPHALO2%EAST(IJB-1:IJE+1,:) ENDIF ENDIF @@ -677,13 +682,15 @@ END SELECT ! a) Determine E/W boundaries -IF ((NHALO == 1).AND.(HLBCX(1) == 'CYCL').OR.((.NOT.LWEST_ll()).AND.(NHALO == 1)) ) THEN +!!$IF ((NHALO == 1).AND.(HLBCX(1) == 'CYCL').OR.((.NOT.LWEST_ll()).AND.(NHALO == 1)) ) THEN +IF ( (HLBCX(1) == 'CYCL') .OR. (.NOT.LWEST_ll()) ) THEN IWZ = IW-1 ELSE IWZ = IW ENDIF -IF ((NHALO == 1).AND.(HLBCX(1) == 'CYCL').OR.((.NOT.LEAST_ll()).AND.(NHALO == 1)) ) THEN +!!$IF ((NHALO == 1).AND.(HLBCX(1) == 'CYCL').OR.((.NOT.LEAST_ll()).AND.(NHALO == 1)) ) THEN +IF ((HLBCX(1) == 'CYCL').OR.(.NOT.LEAST_ll()) ) THEN IEZ = IE+1 ELSE IEZ = IE @@ -772,27 +779,27 @@ IF ( .NOT. L2D ) THEN CASE ('CYCL') ! In that case one must have HLBCY(1) == HLBCY(2) ! ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IS=IJB+1 IN=IJE-1 - ELSE - IS=IJB - IN=IJE - END IF +!!$ ELSE +!!$ IS=IJB +!!$ IN=IJE +!!$ END IF IF (PRESENT(PLSFIELD)) THEN ZPTBFIELD(IIB-1:IIE+1,IS-2:IN+2,:) = PFIELDM(IIB-1:IIE+1,IS-2:IN+2,:) - PLSFIELD(IIB-1:IIE+1,IS-2:IN+2,:) - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN ZPTBFIELD(IIB-1:IIE+1,IS-3,:) = TPHALO2%SOUTH(IIB-1:IIE+1,:) - TPHALO2LS%SOUTH(IIB-1:IIE+1,:) ZPTBFIELD(IIB-1:IIE+1,IN+3,:) = TPHALO2%NORTH(IIB-1:IIE+1,:) - TPHALO2LS%NORTH(IIB-1:IIE+1,:) - ENDIF +!!$ ENDIF ELSE ZPTBFIELD(IIB-1:IIE+1,IS-2:IN+2,:) = PFIELDM(IIB-1:IIE+1,IS-2:IN+2,:) - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN ZPTBFIELD(IIB-1:IIE+1,IS-3,:) = TPHALO2%SOUTH(IIB-1:IIE+1,:) ZPTBFIELD(IIB-1:IIE+1,IN+3,:) = TPHALO2%NORTH(IIB-1:IIE+1,:) - ENDIF +!!$ ENDIF ENDIF !!! HALOS ARE PROBABLY ALSO NEEDED FOR THE INTERPOLATION COEFFICIENTS??!! @@ -811,33 +818,36 @@ ENDIF IS=IJB+1 END IF ELSE - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IS=IJB+1 - ELSE - IS=IJB - ENDIF +!!$ ELSE +!!$ IS=IJB +!!$ ENDIF ENDIF - IF (LNORTH_ll() .OR. NHALO == 1) THEN +!!$ IF (LNORTH_ll() .OR. NHALO == 1) THEN IN=IJE-1 - ELSE - IN=IJE - END IF - +!!$ ELSE +!!$ IN=IJE +!!$ END IF IF (PRESENT(PLSFIELD)) THEN ZPTBFIELD(IIB-1:IIE+1,IS-2:IN+2,:) = PFIELDM(IIB-1:IIE+1,IS-2:IN+2,:) - PLSFIELD(IIB-1:IIE+1,IS-2:IN+2,:) - IF((NHALO == 1).AND.(.NOT.LSOUTH_ll())) THEN +!!$ IF((NHALO == 1).AND.(.NOT.LSOUTH_ll())) THEN + IF(.NOT.LSOUTH_ll()) THEN ZPTBFIELD(IIB-1:IIE+1,IS-3,:) = TPHALO2%SOUTH(IIB-1:IIE+1,:) - TPHALO2LS%SOUTH(IIB-1:IIE+1,:) ENDIF - IF((NHALO == 1).AND.(.NOT.LNORTH_ll())) THEN +!!$ IF((NHALO == 1).AND.(.NOT.LNORTH_ll())) THEN + IF(.NOT.LNORTH_ll()) THEN ZPTBFIELD(IIB-1:IIE+1,IN+3,:) = TPHALO2%NORTH(IIB-1:IIE+1,:) - TPHALO2LS%NORTH(IIB-1:IIE+1,:) ENDIF ELSE ZPTBFIELD(IIB-1:IIE+1,IS-2:IN+2,:) = PFIELDM(IIB-1:IIE+1,IS-2:IN+2,:) - IF((NHALO == 1).AND.(.NOT.LSOUTH_ll())) THEN +!!$ IF((NHALO == 1).AND.(.NOT.LSOUTH_ll())) THEN + IF(.NOT.LSOUTH_ll()) THEN ZPTBFIELD(IIB-1:IIE+1,IS-3,:) = TPHALO2%SOUTH(IIB-1:IIE+1,:) ENDIF - IF((NHALO == 1).AND.(.NOT.LNORTH_ll())) THEN +!!$ IF((NHALO == 1).AND.(.NOT.LNORTH_ll())) THEN + IF(.NOT.LNORTH_ll()) THEN ZPTBFIELD(IIB-1:IIE+1,IN+3,:) = TPHALO2%NORTH(IIB-1:IIE+1,:) ENDIF ENDIF @@ -865,13 +875,15 @@ ENDIF ! a) Determine E/W boundaries -IF ((NHALO == 1).AND.(HLBCY(1) == 'CYCL').OR.((.NOT.LSOUTH_ll()).AND.(NHALO == 1)) ) THEN +!!$IF ((NHALO == 1).AND.(HLBCY(1) == 'CYCL').OR.((.NOT.LSOUTH_ll()).AND.(NHALO == 1)) ) THEN +IF ((HLBCY(1) == 'CYCL').OR.(.NOT.LSOUTH_ll()) ) THEN ISZ = IS-1 ELSE ISZ = IS ENDIF -IF ((NHALO == 1).AND.(HLBCY(1) == 'CYCL').OR.((.NOT.LNORTH_ll()).AND.(NHALO == 1)) ) THEN +!!$IF ((NHALO == 1).AND.(HLBCY(1) == 'CYCL').OR.((.NOT.LNORTH_ll()).AND.(NHALO == 1)) ) THEN +IF ((HLBCY(1) == 'CYCL').OR.( .NOT.LNORTH_ll() ) ) THEN INZ = IN+1 ELSE INZ = IN @@ -1061,19 +1073,19 @@ SELECT CASE ( HLBCX(1) ) ! X direction LBC type: (1) for left side ! CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IW=IIB+1 IE=IIE-1 - ELSE - IW=IIB - IE=IIE - END IF +!!$ ELSE +!!$ IW=IIB +!!$ IE=IIE +!!$ END IF ! IF (PRESENT(PLSFIELD)) THEN ! !* 1.1.1 Case with LS fields ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN ! PRFIELDS(IW-1,:,:) = PRFIELDS(IW-1,:,:) - PRHODJ(IW-1,:,:) * & PDK4*( & @@ -1093,7 +1105,7 @@ CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) +4.*( PLSFIELD(IE,:,:) + PLSFIELD(IE+2,:,:) ) & -6.* PLSFIELD(IE+1,:,:) ) ! - ENDIF +!!$ ENDIF ! !!$ PRFIELDS(IW:IE,:,:) = PRFIELDS(IW:IE,:,:)-PRHODJ(IW:IE,:,:) * & !!$ PDK4*DX4(PFIELDM(IW-2:IE+2,:,:)-PLSFIELD(IW-2:IE+2,:,:)) @@ -1111,7 +1123,7 @@ CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) ! !* 1.1.2 Case without LS fields ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN ! PRFIELDS(IW-1,:,:) = PRFIELDS(IW-1,:,:) - PRHODJ(IW-1,:,:) * & PDK4*( & @@ -1125,7 +1137,7 @@ CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) -4.*( PFIELDM(IE,:,:) + PFIELDM(IE+2,:,:) ) & +6.* PFIELDM(IE+1,:,:) ) ! - ENDIF +!!$ ENDIF ! !!$ PRFIELDS(IW:IE,:,:) = PRFIELDS(IW:IE,:,:)-PRHODJ(IW:IE,:,:) * & !!$ PDK4*DX4(PFIELDM(IW-2:IE+2,:,:)) @@ -1152,17 +1164,17 @@ CASE ('OPEN','WALL','NEST') IW=IIB+1 END IF ELSE - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IW=IIB+1 - ELSE - IW=IIB - ENDIF +!!$ ELSE +!!$ IW=IIB +!!$ ENDIF ENDIF - IF (LEAST_ll() .OR. NHALO == 1) THEN +!!$ IF (LEAST_ll() .OR. NHALO == 1) THEN IE=IIE-1 - ELSE - IE=IIE - END IF +!!$ ELSE +!!$ IE=IIE +!!$ END IF ! IF (PRESENT(PLSFIELD)) THEN ! @@ -1177,7 +1189,8 @@ CASE ('OPEN','WALL','NEST') PFIELDM(IW-2,:,:) -2.*PFIELDM(IW-1,:,:) + PFIELDM(IW,:,:) & -PLSFIELD(IW-2,:,:) +2.*PLSFIELD(IW-1,:,:) - PLSFIELD(IW,:,:) ) ! - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE ! PRFIELDS(IW-1,:,:) = PRFIELDS(IW-1,:,:) - PRHODJ(IW-1,:,:) * & PDK4*( & @@ -1197,7 +1210,8 @@ CASE ('OPEN','WALL','NEST') PFIELDM(IE,:,:) -2.*PFIELDM(IE+1,:,:) + PFIELDM(IE+2,:,:) & - PLSFIELD(IE,:,:) +2.*PLSFIELD(IE+1,:,:) - PLSFIELD(IE+2,:,:) ) ! - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE ! PRFIELDS(IE+1,:,:) = PRFIELDS(IE+1,:,:) - PRHODJ(IE+1,:,:) * & PDK4*( & @@ -1235,7 +1249,8 @@ CASE ('OPEN','WALL','NEST') PRFIELDS(IW-1,:,:) = PRFIELDS(IW-1,:,:) + PRHODJ(IW-1,:,:) * & PDK2*( PFIELDM(IW-2,:,:) -2.*PFIELDM(IW-1,:,:) + PFIELDM(IW,:,:) ) ! - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE ! PRFIELDS(IW-1,:,:) = PRFIELDS(IW-1,:,:) - PRHODJ(IW-1,:,:) * & PDK4*( & @@ -1250,7 +1265,8 @@ CASE ('OPEN','WALL','NEST') PRFIELDS(IE+1,:,:) = PRFIELDS(IE+1,:,:) + PRHODJ(IE+1,:,:) * & PDK2*( PFIELDM(IE,:,:) -2.*PFIELDM(IE+1,:,:) + PFIELDM(IE+2,:,:) ) ! - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE ! PRFIELDS(IE+1,:,:) = PRFIELDS(IE+1,:,:) - PRHODJ(IE+1,:,:) * & PDK4*( & @@ -1290,19 +1306,19 @@ IF ( .NOT. L2D ) THEN CASE ('CYCL') ! In that case one must have HLBCY(1) == HLBCY(2) ! ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IS=IJB+1 IN=IJE-1 - ELSE - IS=IJB - IN=IJE - END IF +!!$ ELSE +!!$ IS=IJB +!!$ IN=IJE +!!$ END IF ! IF (PRESENT(PLSFIELD)) THEN ! !* 2.1.1 Case with LS fields ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN ! PRFIELDS(:,IS-1,:) = PRFIELDS(:,IS-1,:) - PRHODJ(:,IS-1,:) * & PDK4*( & @@ -1322,7 +1338,7 @@ IF ( .NOT. L2D ) THEN +4.*( PLSFIELD(:,IN,:) + PLSFIELD(:,IN+2,:) ) & -6.* PLSFIELD(:,IN+1,:) ) ! - ENDIF +!!$ ENDIF ! !!$ PRFIELDS(:,IS:IN,:) = PRFIELDS(:,IS:IN,:)-PRHODJ(:,IS:IN,:) * & !!$ PDK4*DY4(PFIELDM(:,IS-2:IN+2,:)-PLSFIELD(:,IS-2:IN+2,:)) @@ -1341,7 +1357,7 @@ IF ( .NOT. L2D ) THEN !* 2.1.2 Case without LS fields ! ! - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN ! PRFIELDS(:,IS-1,:) = PRFIELDS(:,IS-1,:) - PRHODJ(:,IS-1,:) * & PDK4*( & @@ -1355,7 +1371,7 @@ IF ( .NOT. L2D ) THEN -4.*( PFIELDM(:,IN,:) + PFIELDM(:,IN+2,:) ) & +6.* PFIELDM(:,IN+1,:) ) ! - ENDIF +!!$ ENDIF ! !!$ PRFIELDS(:,IS:IN,:) = PRFIELDS(:,IS:IN,:)-PRHODJ(:,IS:IN,:) * & !!$ PDK4*DY4(PFIELDM(:,IS-2:IN+2,:)) @@ -1381,17 +1397,17 @@ IF ( .NOT. L2D ) THEN IS=IJB+1 END IF ELSE - IF(NHALO == 1) THEN +!!$ IF(NHALO == 1) THEN IS=IJB+1 - ELSE - IS=IJB - ENDIF +!!$ ELSE +!!$ IS=IJB +!!$ ENDIF ENDIF - IF (LNORTH_ll() .OR. NHALO == 1) THEN +!!$ IF (LNORTH_ll() .OR. NHALO == 1) THEN IN=IJE-1 - ELSE - IN=IJE - END IF +!!$ ELSE +!!$ IN=IJE +!!$ END IF !* 2.2.1 Case with LS fields ! IF (PRESENT(PLSFIELD)) THEN @@ -1407,7 +1423,8 @@ IF ( .NOT. L2D ) THEN PFIELDM(:,IS-2,:) -2.*PFIELDM(:,IS-1,:) + PFIELDM(:,IS,:) & -PLSFIELD(:,IS-2,:) +2.*PLSFIELD(:,IS-1,:) - PLSFIELD(:,IS,:) ) ! - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE ! PRFIELDS(:,IS-1,:) = PRFIELDS(:,IS-1,:) - PRHODJ(:,IS-1,:) * & PDK4*( & @@ -1427,7 +1444,8 @@ IF ( .NOT. L2D ) THEN PFIELDM(:,IN,:) -2.*PFIELDM(:,IN+1,:) + PFIELDM(:,IN+2,:) & -PLSFIELD(:,IN,:) +2.*PLSFIELD(:,IN+1,:) - PLSFIELD(:,IN+2,:) ) ! - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE ! PRFIELDS(:,IN+1,:) = PRFIELDS(:,IN+1,:) - PRHODJ(:,IN+1,:) * & PDK4*( & @@ -1466,7 +1484,8 @@ IF ( .NOT. L2D ) THEN PRFIELDS(:,IS-1,:) = PRFIELDS(:,IS-1,:) + PRHODJ(:,IS-1,:) * & PDK2*( PFIELDM(:,IS-2,:) -2.*PFIELDM(:,IS-1,:) + PFIELDM(:,IS,:) ) ! - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE ! PRFIELDS(:,IS-1,:) = PRFIELDS(:,IS-1,:) - PRHODJ(:,IS-1,:) * & PDK4*( & @@ -1481,7 +1500,8 @@ IF ( .NOT. L2D ) THEN PRFIELDS(:,IN+1,:) = PRFIELDS(:,IN+1,:) + PRHODJ(:,IN+1,:) * & PDK2*( PFIELDM(:,IN,:) -2.*PFIELDM(:,IN+1,:) + PFIELDM(:,IN+2,:) ) ! - ELSEIF (NHALO == 1) THEN +!!$ ELSEIF (NHALO == 1) THEN + ELSE ! PRFIELDS(:,IN+1,:) = PRFIELDS(:,IN+1,:) - PRHODJ(:,IN+1,:) * & PDK4*( & diff --git a/src/MNH/one_wayn.f90 b/src/MNH/one_wayn.f90 index 1160f2e86..38f722963 100644 --- a/src/MNH/one_wayn.f90 +++ b/src/MNH/one_wayn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! ################### MODULE MODI_ONE_WAY_n @@ -189,6 +188,7 @@ SUBROUTINE ONE_WAY_n(KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT, & !! M. Leriche 11/2009 modify the LB*SVS for the aqueous phase chemistry !! 07/2010 idem for ice phase chemical species !! Bosseur & Filippi 07/2013 Adds Forefire +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -307,10 +307,10 @@ ALLOCATE(ZJ(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3))) ALLOCATE(ZRHOD(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3))) ! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -IIB=IIB-1 -IIE=IIE+1 -IJB=IJB-1 -IJE=IJE+1 +IIB=IIB-JPHEXT +IIE=IIE+JPHEXT +IJB=IJB-JPHEXT +IJE=IJE+JPHEXT ALLOCATE(ZWORK(IIB:IIE,IJB:IJE,SIZE(PLBXTHM,3))) ! can be smaller than child extended subdomain ! LS_FORCING routine can not correctly manage extra halo zone ! LB will be filled only with one layer halo zone for the moment @@ -822,8 +822,8 @@ IF(.NOT. OSTEADY_DMASS) THEN !* 4.3 computing of the dry mass at t ! ! - ZDRYMASST = SUM3D_ll (ZJ(:,:,:)*ZRHOD(:,:,:),IINFO_ll,NXOR_ALL(KMI)+1,NYOR_ALL(KMI)+1, & - 1+JPVEXT,NXEND_ALL(KMI)-1,NYEND_ALL(KMI)-1,SIZE(XRHODJ,3)-JPVEXT) + ZDRYMASST = SUM3D_ll (ZJ(:,:,:)*ZRHOD(:,:,:),IINFO_ll,NXOR_ALL(KMI)+JPHEXT,NYOR_ALL(KMI)+JPHEXT, & + 1+JPVEXT,NXEND_ALL(KMI)-JPHEXT,NYEND_ALL(KMI)-JPHEXT,SIZE(XRHODJ,3)-JPVEXT) ! ! !* 4.4 normal processing (not at the segment beginning) @@ -848,8 +848,8 @@ IF(.NOT. OSTEADY_DMASS) THEN ENDIF ! ! - ZDRYMASSM = SUM3D_ll (ZJ(:,:,:)*ZRHOD(:,:,:),IINFO_ll,NXOR_ALL(KMI)+1,NYOR_ALL(KMI)+1, & - 1+JPVEXT,NXEND_ALL(KMI)-1,NYEND_ALL(KMI)-1,SIZE(XRHODJ,3)-JPVEXT) + ZDRYMASSM = SUM3D_ll (ZJ(:,:,:)*ZRHOD(:,:,:),IINFO_ll,NXOR_ALL(KMI)+JPHEXT,NYOR_ALL(KMI)+JPHEXT, & + 1+JPVEXT,NXEND_ALL(KMI)-JPHEXT,NYEND_ALL(KMI)-JPHEXT,SIZE(XRHODJ,3)-JPVEXT) ! PDRYMASST = ZDRYMASST PDRYMASSS = (PDRYMASST - ZDRYMASSM) / (PTSTEP*KDTRATIO) @@ -992,7 +992,7 @@ ENDIF ! IF ( SIZE(PLBXS,1) /= 0 ) THEN IF( GVERT_INTERP ) THEN - IF ( ILBX == KRIMX+1 ) THEN + IF ( ILBX == KRIMX+JPHEXT ) THEN PLBXS(:,:,:) = VER_INTERP_LIN(PLBXS(:,:,:), & KKLIN_LBXM(:,:,:),PCOEFLIN_LBXM(:,:,:)) ELSE @@ -1006,7 +1006,7 @@ END IF ! IF ( SIZE(PLBYS,1) /= 0 ) THEN IF( GVERT_INTERP ) THEN - IF ( ILBY == KRIMY+1 ) THEN + IF ( ILBY == KRIMY+JPHEXT ) THEN PLBYS(:,:,:) = VER_INTERP_LIN(PLBYS(:,:,:), & KKLIN_LBYM(:,:,:),PCOEFLIN_LBYM(:,:,:)) ELSE diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90 index d0d575bbf..e3572c03d 100644 --- a/src/MNH/open_nestpgd_files.f90 +++ b/src/MNH/open_nestpgd_files.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_nest_pgd 2006/05/18 13:07:25 !----------------------------------------------------------------- !############################# MODULE MODI_OPEN_NESTPGD_FILES @@ -64,6 +63,7 @@ END MODULE MODI_OPEN_NESTPGD_FILES !! 15/10/01 (I.Mallet) allow namelists in different orders !! 07/06/2010 (J.escobar from Ivan Ristic) bug PGI !! 30/12/2012 (S.Bielli) Add NAM_NCOUT for netcdf output +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -87,6 +87,8 @@ USE MODN_NCOUT #endif USE MODN_CONFIO ! +USE MODN_CONF, ONLY : JPHEXT , NHALO_MNH => NHALO +! IMPLICIT NONE ! !* 0.1 Declaration of arguments @@ -130,6 +132,7 @@ NAMELIST/NAM_PGD6/ YPGD6, IDAD NAMELIST/NAM_PGD7/ YPGD7, IDAD NAMELIST/NAM_PGD8/ YPGD8, IDAD NAMELIST/NAM_NEST_PGD/ YNEST +NAMELIST/NAM_CONF_NEST/JPHEXT, NHALO_MNH !------------------------------------------------------------------------------- ! !* 1. SET DEFAULT NAMES @@ -159,6 +162,11 @@ CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,FORM='FORMATTED',ACTION='WRI CALL OPEN_ll(UNIT=IPRE_NEST_PGD,FILE=HPRE_NEST_PGD,IOSTAT=IRESP,FORM='FORMATTED',ACTION='READ', & MODE=GLOBAL) ! +!JUAN +CALL POSNAM(IPRE_NEST_PGD,'NAM_CONF_NEST',GFOUND) +IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONF_NEST) +!JUAN +! !------------------------------------------------------------------------------- ! !* 4. READING OF THE OTHER FILE NAMES diff --git a/src/MNH/pgdfilter.f90 b/src/MNH/pgdfilter.f90 index dfa03ffc4..009552369 100644 --- a/src/MNH/pgdfilter.f90 +++ b/src/MNH/pgdfilter.f90 @@ -59,6 +59,7 @@ END MODULE MODI_PGDFILTER !! Modification !! 25/05/96 (V Masson) remove useless ZMASKIJ !! 28/11/96 (V Masson) test on point localisation itself +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !---------------------------------------------------------------------------- ! !* 0. DECLARATION @@ -98,10 +99,6 @@ INTEGER :: IIB,IJB,IIE,IJE !* 1. Initialisations ! --------------- ! -!RETURN -!!$IIU=SIZE(PPGDARRAY,1) -!!$IJU=SIZE(PPGDARRAY,2) - CALL GET_DIM_EXT_ll('B',IIU,IJU) CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) @@ -125,20 +122,20 @@ CALL ADD2DFIELD_ll(TZFIELDS_ll,ZARRAY_ll ) CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) ZARRAY(1:IIU,1:IJU) = ZARRAY_ll(1:IIU,1:IJU) DO JITER=1,KPGDFILTER - DO JI=1,IIU - DO JJ=1,IJU + DO JI= IIB-1,IIE+1 + DO JJ= IJB-1,IJE+1 IF ( ZARRAY(JI,JJ)==XUNDEF ) CYCLE ICOEF(:,:)=0 - IF (JI>1 ) THEN + IF (JI>IIB-1 ) THEN IF(PPGDARRAY(JI-1,JJ)/=XUNDEF) ICOEF(1,1)=1 END IF - IF (JI<IIU) THEN + IF (JI<IIE+1) THEN IF(PPGDARRAY(JI+1,JJ)/=XUNDEF) ICOEF(2,1)=1 END IF - IF (JJ>1 ) THEN + IF (JJ>IJB-1 ) THEN IF(PPGDARRAY(JI,JJ-1)/=XUNDEF) ICOEF(1,2)=1 END IF - IF (JJ<IJU) THEN + IF (JJ<IJE+1) THEN IF(PPGDARRAY(JI,JJ+1)/=XUNDEF) ICOEF(2,2)=1 END IF IF (ANY( ICOEF == 1 ) ) THEN diff --git a/src/MNH/polar_calc.f90 b/src/MNH/polar_calc.f90 index 7bd3b48de..d38603d2d 100644 --- a/src/MNH/polar_calc.f90 +++ b/src/MNH/polar_calc.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/05/18 13:07:25 !----------------------------------------------------------------- ! #################### MODULE MODI_POLAR_CALC @@ -73,6 +72,7 @@ END MODULE MODI_POLAR_CALC !! MODIFICATIONS !! ------------- !! Original 01/12/01 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -82,11 +82,11 @@ END MODULE MODI_POLAR_CALC USE MODD_CONF, ONLY: NVERB USE MODD_CST, ONLY: XPI USE MODD_LUNIT, ONLY: CLUOUT0 -USE MODD_PARAMETERS, ONLY: JPHEXT USE MODD_DIM_n, ONLY: NIMAX,NJMAX USE MODD_GRID_n, ONLY: XXHAT,XYHAT ! USE MODE_FM +USE MODE_ll ! IMPLICIT NONE ! @@ -130,10 +130,7 @@ ZDELTAY = XYHAT(3) - XYHAT(2) ZDELTAR = MAX(ZDELTAX,ZDELTAY) ZDPHI = 2.*XPI/IPHI ! -IIB=1+JPHEXT -IJB=1+JPHEXT -IIE=NIMAX+JPHEXT -IJE=NJMAX+JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IF (NVERB>=5) & WRITE(ILUOUT0,'(A,4I4)')'routine polar_calc: indexes of MesoNH domain ', & IIB,IIE,IJB,IJE diff --git a/src/MNH/polar_mean.f90 b/src/MNH/polar_mean.f90 index d9cf768d6..2eb0ee291 100644 --- a/src/MNH/polar_mean.f90 +++ b/src/MNH/polar_mean.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ###################### MODULE MODI_POLAR_MEAN @@ -80,6 +79,7 @@ END MODULE MODI_POLAR_MEAN !! MODIFICATIONS !! ------------- !! Original 01/12/01 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -87,8 +87,8 @@ END MODULE MODI_POLAR_MEAN ! ------------ ! USE MODD_CST, ONLY: XPI -USE MODD_PARAMETERS, ONLY: JPHEXT USE MODD_GRID_n, ONLY: XXHAT,XYHAT +USE MODE_ll ! IMPLICIT NONE ! @@ -127,10 +127,7 @@ IPHI= SIZE(PR0,1) ! IIU=SIZE(PVARIN,1) IJU=SIZE(PVARIN,2) -IIB=1+JPHEXT -IJB=1+JPHEXT -IIE=IIU-JPHEXT -IJE=IJU-JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! ZDELTAX = XXHAT(3) - XXHAT(2) ZDELTAY = XYHAT(3) - XYHAT(2) @@ -219,8 +216,8 @@ END SUBROUTINE POLAR_MEAN_P ! ------------ ! USE MODD_CST, ONLY: XPI -USE MODD_PARAMETERS, ONLY: JPHEXT USE MODD_GRID_n, ONLY: XXHAT,XYHAT +USE MODE_ll ! IMPLICIT NONE ! @@ -257,10 +254,7 @@ IPHI= SIZE(PR0,2) ! IIU=SIZE(PVARIN,1) IJU=SIZE(PVARIN,2) -IIB=1+JPHEXT -IJB=1+JPHEXT -IIE=IIU-JPHEXT -IJE=IJU-JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! ZDELTAX = XXHAT(3) - XXHAT(2) ZDELTAY = XYHAT(3) - XYHAT(2) diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index f85aa3cf4..c1e066e42 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! ####################### PROGRAM PREP_IDEAL_CASE @@ -311,6 +310,7 @@ !! BUG if ZFRC and ZFRC_ADV or ZFRC_REL are used together 11/2014 (G. Delautier) !! Bug : detected with cray compiler , !! missing '&' in continuation string 3/12/2014 J.Escobar +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -424,6 +424,10 @@ USE MODI_INI_CST USE MODI_INI_NEB USE MODE_FMWRIT USE MODI_WRITE_HGRID +USE MODD_MPIF +USE MODD_VAR_ll +! +USE MODE_MPPDB ! IMPLICIT NONE ! @@ -564,6 +568,9 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZS_ll INTEGER :: IJ INTEGER :: NZSFILTER=1 ! number of iteration for filter for fine orography ! +REAL :: ZZS_MAX, ZZS_MAX_ll +INTEGER :: IJPHEXT +! ! !* 0.2 Namelist declarations ! @@ -572,7 +579,8 @@ NAMELIST/NAM_CONF_PRE/ LTHINSHELL,LCARTESIAN, &! Declarations in MODD_CONF NVERB,CIDEAL,CZS, &!+global variables initialized LBOUSS,LPERTURB,LPV_PERT, &! at their declarations LRMV_BL,LFORCING,CEQNSYS, &! at their declarations - LSHIFT,L2D_ADV_FRC,L2D_REL_FRC + LSHIFT,L2D_ADV_FRC,L2D_REL_FRC, & + NHALO , JPHEXT NAMELIST/NAM_GRID_PRE/ XLON0,XLAT0, & ! Declarations in MODD_GRID XBETA,XRPK, & XLONORI,XLATORI @@ -603,6 +611,7 @@ NAMELIST/NAM_AERO_PRE/ LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ, & ! !* 0. PROLOGUE ! -------- +CALL MPPDB_INIT() ! CALL GOTO_MODEL(1) ! @@ -698,15 +707,28 @@ IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN ! read the grid in the PGD file CALL FMREAD(CPGD_FILE,'IMAX',CLUOUT,'--',NIMAX,IGRID,ILENCH,YCOMMENT,IRESP) CALL FMREAD(CPGD_FILE,'JMAX',CLUOUT,'--',NJMAX,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(CPGD_FILE,'JPHEXT',CLUOUT,'--',IJPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) + IF ( CPGD_FILE /= CINIFILEPGD) THEN - WRITE(NLUOUT,FMT=*) ' WARNING : in PRE_IDEA1.nam, in NAM_LUNITn you& - & have CINIFILEPGD= ',CINIFILEPGD - WRITE(NLUOUT,FMT=*) ' whereas in NAM_REAL_PGD you have CPGD_FILE = '& - ,CPGD_FILE - WRITE(NLUOUT,FMT=*) ' ' - WRITE(NLUOUT,FMT=*) ' CINIFILEPGD HAS BEEN SET TO ',CPGD_FILE - CINIFILEPGD=CPGD_FILE - ENDIF + WRITE(NLUOUT,FMT=*) ' WARNING : in PRE_IDEA1.nam, in NAM_LUNITn you& + & have CINIFILEPGD= ',CINIFILEPGD + WRITE(NLUOUT,FMT=*) ' whereas in NAM_REAL_PGD you have CPGD_FILE = '& + ,CPGD_FILE + WRITE(NLUOUT,FMT=*) ' ' + WRITE(NLUOUT,FMT=*) ' CINIFILEPGD HAS BEEN SET TO ',CPGD_FILE + CINIFILEPGD=CPGD_FILE + END IF + IF ( IJPHEXT .NE. JPHEXT ) THEN + WRITE(NLUOUT,FMT=*) ' PREP_IDEAL_CASE : JPHEXT in PRE_IDEA1.nam/NAM_CONF_PRE ( or default value )& + JPHEXT=',JPHEXT + WRITE(NLUOUT,FMT=*) ' different from PGD files=', CINIFILEPGD,' value JPHEXT=',IJPHEXT + WRITE(NLUOUT,FMT=*) '-> JOB ABORTED' + CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + !WRITE(NLUOUT,FMT=*) ' JPHEXT HAS BEEN SET TO ', IJPHEXT + !IJPHEXT = JPHEXT + END IF END IF ! NIMAX_ll=NIMAX !! _ll variables are global variables @@ -993,30 +1015,30 @@ ELSEIF( L2D ) THEN ! 2D case (not yet parallelized) ALLOCATE(XLBYSVM(0,0,0,0)) ! IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2 - NSIZELBXU_ll=2*NRIMX+2 - ALLOCATE(XLBXUM(2*NRIMX+2,NJU,NKU)) - ALLOCATE(XLBXVM(2*NRIMX+2,NJU,NKU)) - ALLOCATE(XLBXWM(2*NRIMX+2,NJU,NKU)) - ALLOCATE(XLBXTHM(2*NRIMX+2,NJU,NKU)) + NSIZELBX_ll=2*NRIMX+2*JPHEXT + NSIZELBXU_ll=2*NRIMX+2*JPHEXT + ALLOCATE(XLBXUM(2*NRIMX+2*JPHEXT,NJU,NKU)) + ALLOCATE(XLBXVM(2*NRIMX+2*JPHEXT,NJU,NKU)) + ALLOCATE(XLBXWM(2*NRIMX+2*JPHEXT,NJU,NKU)) + ALLOCATE(XLBXTHM(2*NRIMX+2*JPHEXT,NJU,NKU)) ELSE - NSIZELBX_ll=2 - NSIZELBXU_ll=4 - ALLOCATE(XLBXUM(4,NJU,NKU)) - ALLOCATE(XLBXVM(2,NJU,NKU)) - ALLOCATE(XLBXWM(2,NJU,NKU)) - ALLOCATE(XLBXTHM(2,NJU,NKU)) + NSIZELBX_ll= 2*JPHEXT ! 2 + NSIZELBXU_ll=2*(JPHEXT+1) ! 4 + ALLOCATE(XLBXUM(NSIZELBXU_ll,NJU,NKU)) + ALLOCATE(XLBXVM(NSIZELBX_ll,NJU,NKU)) + ALLOCATE(XLBXWM(NSIZELBX_ll,NJU,NKU)) + ALLOCATE(XLBXTHM(NSIZELBX_ll,NJU,NKU)) END IF ! IF ( NRR > 0 ) THEN IF ( LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & ) THEN - NSIZELBXR_ll=2* NRIMX+2 - ALLOCATE(XLBXRM(2*NRIMX+2,NJU,NKU,NRR)) + NSIZELBXR_ll=2*NRIMX+2*JPHEXT + ALLOCATE(XLBXRM(2*NRIMX+2*JPHEXT,NJU,NKU,NRR)) ELSE - NSIZELBXR_ll=2 - ALLOCATE(XLBXRM(2,NJU,NKU,NRR)) + NSIZELBXR_ll=2*JPHEXT ! 2 + ALLOCATE(XLBXRM(NSIZELBXR_ll,NJU,NKU,NRR)) ENDIF ELSE NSIZELBXR_ll=0 @@ -1025,11 +1047,11 @@ ELSEIF( L2D ) THEN ! 2D case (not yet parallelized) ! IF ( NSV > 0 ) THEN IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2* NRIMX+2 - ALLOCATE(XLBXSVM(2*NRIMX+2,NJU,NKU,NSV)) + NSIZELBXSV_ll=2*NRIMX+2*JPHEXT + ALLOCATE(XLBXSVM(2*NRIMX+2*JPHEXT,NJU,NKU,NSV)) ELSE - NSIZELBXSV_ll=2 - ALLOCATE(XLBXSVM(2,NJU,NKU,NSV)) + NSIZELBXSV_ll=2*JPHEXT ! 2 + ALLOCATE(XLBXSVM(NSIZELBXSV_ll,NJU,NKU,NSV)) END IF ELSE NSIZELBXSV_ll=0 @@ -1046,10 +1068,10 @@ ELSE ! 3D case IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2) ! IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2 - NSIZELBXU_ll=2*NRIMX+2 - NSIZELBY_ll=2*NRIMY+2 - NSIZELBYV_ll=2*NRIMY+2 + NSIZELBX_ll=2*NRIMX+2*JPHEXT + NSIZELBXU_ll=2*NRIMX+2*JPHEXT + NSIZELBY_ll=2*NRIMY+2*JPHEXT + NSIZELBYV_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,NKU)) ALLOCATE(XLBYUM(IISIZEYF,IJSIZEYF,NKU)) ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,NKU)) @@ -1059,10 +1081,10 @@ ELSE ! 3D case ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,NKU)) ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,NKU)) ELSE - NSIZELBX_ll=2 - NSIZELBXU_ll=4 - NSIZELBY_ll=2 - NSIZELBYV_ll=4 + NSIZELBX_ll=2*JPHEXT ! 2 + NSIZELBXU_ll=2*(JPHEXT+1) ! 4 + NSIZELBY_ll=2*JPHEXT ! 2 + NSIZELBYV_ll=2*(JPHEXT+1) ! 4 ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,NKU)) ALLOCATE(XLBYUM(IISIZEY2,IJSIZEY2,NKU)) ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,NKU)) @@ -1077,13 +1099,13 @@ ELSE ! 3D case IF ( LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & ) THEN - NSIZELBXR_ll=2*NRIMX+2 - NSIZELBYR_ll=2*NRIMY+2 + NSIZELBXR_ll=2*NRIMX+2*JPHEXT + NSIZELBYR_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,NKU,NRR)) ALLOCATE(XLBYRM(IISIZEYF,IJSIZEYF,NKU,NRR)) ELSE - NSIZELBXR_ll=2 - NSIZELBYR_ll=2 + NSIZELBXR_ll=2*JPHEXT ! 2 + NSIZELBYR_ll=2*JPHEXT ! 2 ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,NKU,NRR)) ALLOCATE(XLBYRM(IISIZEY2,IJSIZEY2,NKU,NRR)) ENDIF @@ -1096,13 +1118,13 @@ ELSE ! 3D case ! IF ( NSV > 0 ) THEN IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2*NRIMX+2 - NSIZELBYSV_ll=2*NRIMY+2 + NSIZELBXSV_ll=2*NRIMX+2*JPHEXT + NSIZELBYSV_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,NKU,NSV)) ALLOCATE(XLBYSVM(IISIZEYF,IJSIZEYF,NKU,NSV)) ELSE - NSIZELBXSV_ll=2 - NSIZELBYSV_ll=2 + NSIZELBXSV_ll=2*JPHEXT ! 2 + NSIZELBYSV_ll=2*JPHEXT ! 2 ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,NKU,NSV)) ALLOCATE(XLBYSVM(IISIZEY2,IJSIZEY2,NKU,NSV)) END IF @@ -1143,7 +1165,10 @@ IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN ! ! determine whether the model is flat or no ! - IF( ABS( MAXVAL(XZS(NIB:NIU-JPHEXT,NJB:NJU-JPHEXT)) ) < 1.E-10 ) THEN + ZZS_MAX = ABS( MAXVAL(XZS(NIB:NIU-JPHEXT,NJB:NJU-JPHEXT))) + CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MPI_PRECISION, MPI_MAX, & + NMNH_COMM_WORLD,IINFO_ll) + IF( ABS(ZZS_MAX_ll) < 1.E-10 ) THEN LFLAT=.TRUE. ELSE LFLAT=.FALSE. @@ -1265,6 +1290,20 @@ IF ( LEN_TRIM(CPGD_FILE) == 0 .OR. .NOT. LREAD_ZS) THEN ENDIF END DO ENDIF + CASE('AGNE') ! h*a**2/(x**2+a**2) shape + LFLAT = .FALSE. + IF(L2D) THEN ! two-dimensional case + DO JILOOP = 1, NIU + ZDIST = XXHAT(JILOOP)-FLOAT(NIZS)*XDELTAX + XZS(JILOOP,:) = XHMAX*(XAX**2)/(XAX**2+ZDIST**2) + END DO + ELSE ! three dimensionnal case - infinite profile in y direction + DO JILOOP = 1, NIU + ZDIST = XXHAT(JILOOP)-FLOAT(NIZS)*XDELTAX + XZS(JILOOP,:) = XHMAX*(XAX**2)/(XAX**2+ZDIST**2) + END DO + ENDIF + CASE('DATA') ! discretized orography LFLAT =.FALSE. WRITE(NLUOUT,FMT=*) 'CZS="DATA", ATTEMPT TO READ ARRAY & @@ -1372,20 +1411,17 @@ IF (CTYPELOC /= 'IJGRID') THEN NJLOC = MINLOC(ABS(XYHATLOC-ZYHAT_ll(:))) END IF ! -IF ( NILOC(1) == 1 ) NILOC = 2 -IF ( NJLOC(1) == 1 ) NJLOC = 2 -! -IF ( L1D .AND. (NILOC(1) /= NIB .OR. NJLOC(1) /= NJB) ) THEN - NILOC = NIB - NJLOC = NJB +IF ( L1D .AND. ( NILOC(1) /= 1 .OR. NJLOC(1) /= 1 ) ) THEN + NILOC = 1 + NJLOC = 1 WRITE(NLUOUT,FMT=*) 'FOR 1D CONFIGURATION, THE RS INFORMATIONS ARE TAKEN AT & - & I=NIB AND J=NJB (CENTRAL VERTICAL)' + & I=1 AND J=1 (CENTRAL VERTICAL WITHOUT HALO)' END IF ! -IF ( L2D .AND. ( NJLOC(1) /= NJB) ) THEN - NJLOC = NJB +IF ( L2D .AND. ( NJLOC(1) /= 1 ) ) THEN + NJLOC = 1 WRITE(NLUOUT,FMT=*) 'FOR 2D CONFIGURATION, THE RS INFORMATIONS ARE TAKEN AT & - & J=NJB (CENTRAL PLANE)' + & J=1 (CENTRAL PLANE WITHOUT HALO)' END IF ! !* 5.2 Prognostic variables (not multiplied by rhoJ) : u,v,w,theta,r @@ -1538,42 +1574,42 @@ END IF ILBX=SIZE(XLBXUM,1) ILBY=SIZE(XLBYUM,2) IF(LWEST_ll() .AND. .NOT. L1D) THEN - XLBXUM(1:NRIMX+1, :,:) = XUT(2:NRIMX+2, :,:) - XLBXVM(1:NRIMX+1, :,:) = XVT(1:NRIMX+1, :,:) - XLBXWM(1:NRIMX+1, :,:) = XWT(1:NRIMX+1, :,:) - XLBXTHM(1:NRIMX+1, :,:) = XTHT(1:NRIMX+1, :,:) - XLBXRM(1:NRIMX+1, :,:,:) = XRT(1:NRIMX+1, :,:,:) + XLBXUM(1:NRIMX+JPHEXT, :,:) = XUT(2:NRIMX+JPHEXT+1, :,:) + XLBXVM(1:NRIMX+JPHEXT, :,:) = XVT(1:NRIMX+JPHEXT, :,:) + XLBXWM(1:NRIMX+JPHEXT, :,:) = XWT(1:NRIMX+JPHEXT, :,:) + XLBXTHM(1:NRIMX+JPHEXT, :,:) = XTHT(1:NRIMX+JPHEXT, :,:) + XLBXRM(1:NRIMX+JPHEXT, :,:,:) = XRT(1:NRIMX+JPHEXT, :,:,:) ENDIF IF(LEAST_ll() .AND. .NOT. L1D) THEN - XLBXUM(ILBX-NRIMX:ILBX,:,:) = XUT(NIU-NRIMX:NIU, :,:) - XLBXVM(ILBX-NRIMX:ILBX,:,:) = XVT(NIU-NRIMX:NIU, :,:) - XLBXWM(ILBX-NRIMX:ILBX,:,:) = XWT(NIU-NRIMX:NIU, :,:) - XLBXTHM(ILBX-NRIMX:ILBX,:,:) = XTHT(NIU-NRIMX:NIU, :,:) - XLBXRM(ILBX-NRIMX:ILBX,:,:,:) = XRT(NIU-NRIMX:NIU, :,:,:) + XLBXUM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XUT(NIU-NRIMX-JPHEXT+1:NIU, :,:) + XLBXVM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XVT(NIU-NRIMX-JPHEXT+1:NIU, :,:) + XLBXWM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XWT(NIU-NRIMX-JPHEXT+1:NIU, :,:) + XLBXTHM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XTHT(NIU-NRIMX-JPHEXT+1:NIU, :,:) + XLBXRM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:,:) = XRT(NIU-NRIMX-JPHEXT+1:NIU, :,:,:) ENDIF IF(LSOUTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) THEN - XLBYUM(:,1:NRIMY+1, :) = XUT(:,1:NRIMY+1, :) - XLBYVM(:,1:NRIMY+1, :) = XVT(:,2:NRIMY+2, :) - XLBYWM(:,1:NRIMY+1, :) = XWT(:,1:NRIMY+1, :) - XLBYTHM(:,1:NRIMY+1, :) = XTHT(:,1:NRIMY+1, :) - XLBYRM(:,1:NRIMY+1, :,:) = XRT(:,1:NRIMY+1, :,:) + XLBYUM(:,1:NRIMY+JPHEXT, :) = XUT(:,1:NRIMY+JPHEXT, :) + XLBYVM(:,1:NRIMY+JPHEXT, :) = XVT(:,2:NRIMY+JPHEXT+1, :) + XLBYWM(:,1:NRIMY+JPHEXT, :) = XWT(:,1:NRIMY+JPHEXT, :) + XLBYTHM(:,1:NRIMY+JPHEXT, :) = XTHT(:,1:NRIMY+JPHEXT, :) + XLBYRM(:,1:NRIMY+JPHEXT, :,:) = XRT(:,1:NRIMY+JPHEXT, :,:) ENDIF IF(LNORTH_ll().AND. .NOT. L1D .AND. .NOT. L2D) THEN - XLBYUM(:,ILBY-NRIMY:ILBY,:) = XUT(:,NJU-NRIMY:NJU, :) - XLBYVM(:,ILBY-NRIMY:ILBY,:) = XVT(:,NJU-NRIMY:NJU, :) - XLBYWM(:,ILBY-NRIMY:ILBY,:) = XWT(:,NJU-NRIMY:NJU, :) - XLBYTHM(:,ILBY-NRIMY:ILBY,:) = XTHT(:,NJU-NRIMY:NJU, :) - XLBYRM(:,ILBY-NRIMY:ILBY,:,:) = XRT(:,NJU-NRIMY:NJU, :,:) + XLBYUM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XUT(:,NJU-NRIMY-JPHEXT+1:NJU, :) + XLBYVM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XVT(:,NJU-NRIMY-JPHEXT+1:NJU, :) + XLBYWM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XWT(:,NJU-NRIMY-JPHEXT+1:NJU, :) + XLBYTHM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XTHT(:,NJU-NRIMY-JPHEXT+1:NJU, :) + XLBYRM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:,:) = XRT(:,NJU-NRIMY-JPHEXT+1:NJU, :,:) ENDIF DO JSV = 1, NSV IF(LWEST_ll() .AND. .NOT. L1D) & - XLBXSVM(1:NRIMX+1, :,:,JSV) = XSVT(1:NRIMX+1, :,:,JSV) + XLBXSVM(1:NRIMX+JPHEXT, :,:,JSV) = XSVT(1:NRIMX+JPHEXT, :,:,JSV) IF(LEAST_ll() .AND. .NOT. L1D) & - XLBXSVM(ILBX-NRIMX:ILBX,:,:,JSV) = XSVT(NIU-NRIMX:NIU, :,:,JSV) + XLBXSVM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:,JSV) = XSVT(NIU-NRIMX-JPHEXT+1:NIU, :,:,JSV) IF(LSOUTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) & - XLBYSVM(:,1:NRIMY+1, :,JSV) = XSVT(:,1:NRIMY+1, :,JSV) + XLBYSVM(:,1:NRIMY+JPHEXT, :,JSV) = XSVT(:,1:NRIMY+JPHEXT, :,JSV) IF(LNORTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) & - XLBYSVM(:,ILBY-NRIMY:ILBY,:,JSV) = XSVT(:,NJU-NRIMY:NJU, :,JSV) + XLBYSVM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:,JSV) = XSVT(:,NJU-NRIMY-JPHEXT+1:NJU, :,JSV) END DO ! ! diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90 index c60b101fc..6338c9077 100644 --- a/src/MNH/prep_nest_pgd.f90 +++ b/src/MNH/prep_nest_pgd.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/22 12:37:08 !----------------------------------------------------------------- ! ##################### PROGRAM PREP_NEST_PGD @@ -89,6 +88,7 @@ !! ------------- !! Original 26/09/95 !! 30/07/97 (Masson) split of mode_lfifm_pgd +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -132,6 +132,9 @@ USE MODN_NCOUT USE MODE_UTIL #endif ! +USE MODE_SPLITTINGZ_ll, ONLY : INI_PARAZ_ll +USE MODE_MPPDB +! IMPLICIT NONE ! !* 0.1 Declaration of local variables @@ -160,12 +163,13 @@ INTEGER :: JTIME,ITIME ! !------------------------------------------------------------------------------- ! +CALL MPPDB_INIT() ! CALL VERSION CPROGRAM='NESPGD' ! CALL INITIO_ll() -CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) +!!$CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) ! !* 1. INITIALIZATION OF PHYSICAL CONSTANTS ! ------------------------------------ @@ -180,6 +184,8 @@ CALL INI_CST NVERB=1 ! CALL OPEN_NESTPGD_FILES(CPGD,CNESTPGD) +CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) +! CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! CALL ALLOC_SURFEX(NMODEL) @@ -216,6 +222,21 @@ NYSIZE(:)=0 NDXRATIO_ALL(:)=0 NDYRATIO_ALL(:)=0 ! +!MODEL1 + ! read the grid in the PGD file +CALL FMREAD(CPGD(1),'IMAX',CLUOUT0,'--',NXSIZE(1),IGRID,ILENCH,YCOMMENT,IRESP) +CALL FMREAD(CPGD(1),'JMAX',CLUOUT0,'--',NYSIZE(1),IGRID,ILENCH,YCOMMENT,IRESP) +! +CALL SET_DAD0_ll() +CALL SET_DIM_ll(NXSIZE(1),NYSIZE(1),1) +CALL SET_XRATIO_ll(1, 1) +CALL SET_YRATIO_ll(1, 1) +CALL SET_XOR_ll(1, 1) +CALL SET_XEND_ll(NXSIZE(1)+2*JPHEXT, 1) +CALL SET_YOR_ll(1, 1) +CALL SET_YEND_ll(NYSIZE(1)+2*JPHEXT, 1) +CALL SET_DAD_ll(0, 1) +! !* loop in this order, to make coherent all the coordinate arrays with model 1 ! DO JPGD=2,NMODEL @@ -223,9 +244,24 @@ DO JPGD=2,NMODEL NXOR_ALL(JPGD),NYOR_ALL(JPGD), & NXSIZE(JPGD),NYSIZE(JPGD), & NDXRATIO_ALL(JPGD),NDYRATIO_ALL(JPGD)) - NXEND_ALL(JPGD)=NXOR_ALL(JPGD)+NXSIZE(JPGD)+1 - NYEND_ALL(JPGD)=NYOR_ALL(JPGD)+NYSIZE(JPGD)+1 + + NXEND_ALL(JPGD)=NXOR_ALL(JPGD)+NXSIZE(JPGD)+2*JPHEXT -1 + NYEND_ALL(JPGD)=NYOR_ALL(JPGD)+NYSIZE(JPGD)+2*JPHEXT -1 + +!!$ CALL SET_LBX_ll(CLBCX(1), JPGD) +!!$ CALL SET_LBY_ll(CLBCY(1), JPGD) + CALL SET_XRATIO_ll(NDXRATIO_ALL(JPGD), JPGD) + CALL SET_YRATIO_ll(NDYRATIO_ALL(JPGD), JPGD) + CALL SET_XOR_ll(NXOR_ALL(JPGD), JPGD) + CALL SET_XEND_ll(NXEND_ALL(JPGD), JPGD) + CALL SET_YOR_ll(NYOR_ALL(JPGD), JPGD) + CALL SET_YEND_ll(NYEND_ALL(JPGD), JPGD) + CALL SET_DAD_ll(NDAD(JPGD), JPGD ) + +!!$CALL SET_DIM_ll(NXSIZE(JPGD),NYSIZE(JPGD),1) + END DO +CALL INI_PARAZ_ll(IINFO_ll) ! !------------------------------------------------------------------------------- ! @@ -235,7 +271,7 @@ END DO DO JPGD=1,NMODEL CALL GOTO_SURFEX(JPGD,.TRUE.) CALL GOTO_MODEL(JPGD) - CALL INIT_HORGRID_ll_n() +!!$ CALL INIT_HORGRID_ll_n() CALL DEFINE_MASK_n() END DO ! @@ -248,6 +284,7 @@ WRITE(ILUOUT0,FMT=*) WRITE(ILUOUT0,FMT=*) 'field ZS of all models' DO JPGD=NMODEL,1,-1 CALL GOTO_MODEL(JPGD) +!!$ CALL GO_TOMODEL_ll(JPGD,IINFO_ll) CALL GOTO_SURFEX(JPGD,.TRUE.) CALL NEST_FIELD_n('ZS ') END DO @@ -258,6 +295,7 @@ WRITE(ILUOUT0,FMT=*) WRITE(ILUOUT0,FMT=*) 'field ZSMT of all models' DO JPGD=1,NMODEL CALL GOTO_MODEL(JPGD) +!!$ CALL GO_TOMODEL_ll(JPGD,IINFO_ll) CALL GOTO_SURFEX(JPGD,.TRUE.) CALL NEST_ZSMT_n('ZSMT ') END DO @@ -286,6 +324,7 @@ END DO ! ------------------------- ! DO JPGD=1,NMODEL +!!$ CALL GO_TOMODEL_ll(JPGD,IINFO_ll) CALL GOTO_MODEL(JPGD) CALL GOTO_SURFEX(JPGD,.TRUE.) CALL MNHPUT_ZS_n @@ -354,6 +393,7 @@ DO JPGD=1,NMODEL CALL FMWRIT(CNESTPGD(JPGD),'L1D ',CLUOUT0,'--',L1D_ALL(JPGD),0,1,' ',IRESP) CALL FMWRIT(CNESTPGD(JPGD),'L2D ',CLUOUT0,'--',L2D_ALL(JPGD),0,1,' ',IRESP) CALL FMWRIT(CNESTPGD(JPGD),'PACK ',CLUOUT0,'--',LPACK_ALL(JPGD),0,1,' ',IRESP) + CALL FMWRIT(CNESTPGD(JPGD),'JPHEXT ',CLUOUT0,'--',JPHEXT,0,1,' ',IRESP) END DO ! !------------------------------------------------------------------------------- diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90 index 13f529569..ecf2a6146 100644 --- a/src/MNH/prep_pgd.f90 +++ b/src/MNH/prep_pgd.f90 @@ -60,6 +60,7 @@ !! Modification 30/03/2012 Add NAM_NCOUT for netcdf output (S.Bielli) !! S.Bielli 23/04/2014 supress writing of LAt and LON in NETCDF case !! S.Bielli 20/11/2014 add writing of LAt and LON in NETCDF case +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !---------------------------------------------------------------------------- ! !* 0. DECLARATION @@ -82,6 +83,7 @@ USE MODI_ZSMT_PGD ! !JUAN USE MODN_CONFZ +USE MODN_CONF, ONLY : JPHEXT , NHALO_MNH => NHALO !JUAN USE MODN_CONFIO ! @@ -101,6 +103,8 @@ USE MODN_NCOUT USE MODE_UTIL USE MODE_FMREAD #endif + +USE MODE_MPPDB ! IMPLICIT NONE ! @@ -134,8 +138,10 @@ INTEGER :: IIMAX, IJMAX NAMELIST/NAM_PGDFILE/CPGDFILE, NHALO NAMELIST/NAM_ZSFILTER/NZSFILTER NAMELIST/NAM_SLEVE/NSLEVE, XSMOOTH_ZS +NAMELIST/NAM_CONF_PGD/JPHEXT, NHALO_MNH !------------------------------------------------------------------------------ ! +CALL MPPDB_INIT() ! CPROGRAM='PGD ' ! @@ -173,6 +179,8 @@ IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_SLEVE) !JUANZ CALL POSNAM(ILUNAM,'NAM_CONFZ',GFOUND) IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFZ) +CALL POSNAM(ILUNAM,'NAM_CONF_PGD',GFOUND) +IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONF_PGD) !JUANZ CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND) IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO) @@ -232,6 +240,7 @@ CALL FMWRIT(COUTFMFILE,'SURF ',CLUOUT0,'--','EXTE',0,1,' ',IRESP) CALL FMWRIT(COUTFMFILE,'L1D ',CLUOUT0,'--',L1D,0,1,' ',IRESP) CALL FMWRIT(COUTFMFILE,'L2D ',CLUOUT0,'--',L2D,0,1,' ',IRESP) CALL FMWRIT(COUTFMFILE,'PACK ',CLUOUT0,'--',LPACK,0,1,' ',IRESP) +CALL FMWRIT(COUTFMFILE,'JPHEXT ',CLUOUT0,'--',JPHEXT,0,1,' ',IRESP) ! #ifdef MNH_NCWRIT NC_WRITE = LNETCDF diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index e137453d7..f629664e6 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/11/30 10:44:37 !----------------------------------------------------------------- ! ###################### PROGRAM PREP_REAL_CASE @@ -375,6 +374,7 @@ !! July 2013 (Bosseur & Filippi) Adds Forefire !! Mars 2014 (J.Escobar) Missing 'full' UPDATE_METRICS for arp2lfi // run !! April 2014 (G.TANGUY) Add LCOUPLING +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -459,6 +459,8 @@ USE MODI_DEALLOC_SURFEX ! USE MODE_MPPDB ! +USE MODN_CONF, ONLY : JPHEXT , NHALO +! IMPLICIT NONE ! !* 0.1 Declaration of local variables @@ -510,7 +512,7 @@ LOGICAL :: LUSECHIC ! ------------------------ ! NAMELIST/NAM_REAL_CONF/ NVERB, CEQNSYS, CPRESOPT, LSHIFT, LDUMMY_REAL, & - LRES, XRES, NITR,LCOUPLING + LRES, XRES, NITR,LCOUPLING, NHALO , JPHEXT ! Filtering and balancing of the large-scale and radar tropical cyclone NAMELIST/NAM_HURR_CONF/ LFILTERING, CFILTERING, & XLAMBDA, NK, XLATGUESS, XLONGUESS, XBOXWIND, XRADGUESS, NPHIL, NDIAG_FILT, & @@ -614,6 +616,10 @@ CALL INI_CST ! CALL FMLOOK_ll(YPRE_REAL1,CLUOUT0,IPRE_REAL1,IRESP) ! +CALL INIT_NMLVAR +CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0) +IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF) +! !* 4.2 reading of values of some configuration variables in namelist ! ! diff --git a/src/MNH/pressure_in_prep.f90 b/src/MNH/pressure_in_prep.f90 index 8e635a9cf..4f5ecf00c 100644 --- a/src/MNH/pressure_in_prep.f90 +++ b/src/MNH/pressure_in_prep.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/07/07 11:58:36 !----------------------------------------------------------------- ! ###################### MODULE MODI_PRESSURE_IN_PREP @@ -66,6 +65,7 @@ END MODULE MODI_PRESSURE_IN_PREP !! ------------- !! Original 22/12/98 !! parallelization 18/06/00 (Jabouille) +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -118,8 +118,6 @@ REAL,DIMENSION(SIZE(PDXX,1),SIZE(PDXX,2),SIZE(PDXX,3)):: ZDIV ! residual diverge ! INTEGER :: ILUOUT0 ! logical unit for listing file INTEGER :: IRESP ! error code -INTEGER :: IIB, IIE ! inner limits in X direction -INTEGER :: IJB, IJE ! inner limits in Y direction INTEGER :: IKB, IKE ! inner limits in Z direction INTEGER :: IKU INTEGER :: IINFO_ll @@ -135,10 +133,6 @@ INTEGER :: I,J,K ! CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! -IIB=1+JPHEXT -IIE=NIMAX+JPHEXT -IJB=1+JPHEXT -IJE=NJMAX+JPHEXT IKB=1+JPVEXT IKE=NKMAX+JPVEXT IKU=IKE+JPVEXT diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90 index 4fe0d4b1d..d6622eefd 100644 --- a/src/MNH/pressurez.f90 +++ b/src/MNH/pressurez.f90 @@ -219,6 +219,7 @@ END MODULE MODI_PRESSUREZ !! 02/2013 (J.Escobar ) add a test on abs(err) > 100.O for BG without controle of NAN !! 2012 (V.Masson) Modif update_halo due to CONTRAV !! 2014 (C.Lac) correction for 3D run with LBOUSS=.TRUE. +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -251,6 +252,7 @@ USE MODD_DYN_n , ONLY : LRES, XRES USE MODD_MPIF USE MODD_VAR_ll, ONLY : MPI_PRECISION, NMNH_COMM_WORLD !JUANZ +USE MODE_MPPDB ! IMPLICIT NONE ! @@ -371,6 +373,8 @@ REAL, DIMENSION(SIZE(PDYY,2),SIZE(PDXX,3)) :: ZPABS_W ! local pressure on wester INTEGER :: IINFO_ll,KINFO TYPE(LIST_ll), POINTER :: TZFIELDS_ll, TZFIELDS2_ll ! list of fields to exchange ! +INTEGER :: IIB_I,IIE_I,IJB_I,IJE_I +! ! !------------------------------------------------------------------------------ !------------------------------------------------------------------------------- @@ -527,29 +531,30 @@ IF ( HLBCX(1) /= 'CYCL' ) THEN !!!!!!!!!!!!!!!! FUJI compiler directive !!!!!!!!!! !!!!!!!!!!!!!!!! FUJI compiler directive !!!!!!!!!! DO JK=2,IKU-1 - ZDV_SOURCE(2,:,JK)= & - (ZPHIT(2,:,JK) - ZPHIT(1,:,JK) - 0.5 * ( & - PDZX(2,:,JK) * (ZPHIT(2,:,JK)-ZPHIT(2,:,JK-1)) / PDZZ(2,:,JK) & - +PDZX(2,:,JK+1) * (ZPHIT(2,:,JK+1)-ZPHIT(2,:,JK)) / PDZZ(2,:,JK+1) & + ZDV_SOURCE(IIB,:,JK)= & + (ZPHIT(IIB,:,JK) - ZPHIT(IIB-1,:,JK) - 0.5 * ( & + PDZX(IIB,:,JK) * (ZPHIT(IIB,:,JK)-ZPHIT(IIB,:,JK-1)) / PDZZ(IIB,:,JK) & + +PDZX(IIB,:,JK+1) * (ZPHIT(IIB,:,JK+1)-ZPHIT(IIB,:,JK)) / PDZZ(IIB,:,JK+1) & ) & - ) / PDXX(2,:,JK) + ) / PDXX(IIB,:,JK) END DO ENDIF ! IF(LEAST_ll()) THEN DO JK=2,IKU-1 - ZDV_SOURCE(IIU,:,JK)= & - (ZPHIT(IIU,:,JK) - ZPHIT(IIU-1,:,JK) - 0.5 * ( & - PDZX(IIU,:,JK) * (ZPHIT(IIU-1,:,JK)-ZPHIT(IIU-1,:,JK-1)) & - / PDZZ(IIU-1,:,JK) & - +PDZX(IIU,:,JK+1) * (ZPHIT(IIU-1,:,JK+1)-ZPHIT(IIU-1,:,JK)) & - / PDZZ(IIU-1,:,JK+1) & + ZDV_SOURCE(IIE+1,:,JK)= & + (ZPHIT(IIE+1,:,JK) - ZPHIT(IIE+1-1,:,JK) - 0.5 * ( & + PDZX(IIE+1,:,JK) * (ZPHIT(IIE+1-1,:,JK)-ZPHIT(IIE+1-1,:,JK-1)) & + / PDZZ(IIE+1-1,:,JK) & + +PDZX(IIE+1,:,JK+1) * (ZPHIT(IIE+1-1,:,JK+1)-ZPHIT(IIE+1-1,:,JK)) & + / PDZZ(IIE+1-1,:,JK+1) & ) & - ) / PDXX(IIU,:,JK) + ) / PDXX(IIE+1,:,JK) END DO END IF END IF ! +CALL MPPDB_CHECK3DM("before MXM PRESSUREZ :PRU/V/WS",PRECISION,PRUS,PRVS,PRWS) IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN PRUS = PRUS - MXM(PRHODJ * XCPD * ZTHETAV) * ZDV_SOURCE PRWS = PRWS - MZM(1,IKU,1,PRHODJ * XCPD * ZTHETAV) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ) @@ -567,29 +572,30 @@ IF(.NOT. L2D) THEN !!!!!!!!!!!!!!!! FUJI compiler directive !!!!!!!!!! !!!!!!!!!!!!!!!! FUJI compiler directive !!!!!!!!!! DO JK=2,IKU-1 - ZDV_SOURCE(:,2,JK)= & - (ZPHIT(:,2,JK) - ZPHIT(:,1,JK) - 0.5 * ( & - PDZY(:,2,JK) * (ZPHIT(:,2,JK)-ZPHIT(:,2,JK-1)) / PDZZ(:,2,JK) & - +PDZY(:,2,JK+1) * (ZPHIT(:,2,JK+1)-ZPHIT(:,2,JK)) / PDZZ(:,2,JK+1) & + ZDV_SOURCE(:,IJB,JK)= & + (ZPHIT(:,IJB,JK) - ZPHIT(:,IJB-1,JK) - 0.5 * ( & + PDZY(:,IJB,JK) * (ZPHIT(:,IJB,JK)-ZPHIT(:,IJB,JK-1)) / PDZZ(:,IJB,JK) & + +PDZY(:,IJB,JK+1) * (ZPHIT(:,IJB,JK+1)-ZPHIT(:,IJB,JK)) / PDZZ(:,IJB,JK+1) & ) & - ) / PDYY(:,2,JK) + ) / PDYY(:,IJB,JK) END DO END IF ! IF (LNORTH_ll()) THEN DO JK=2,IKU-1 - ZDV_SOURCE(:,IJU,JK)= & - (ZPHIT(:,IJU,JK) - ZPHIT(:,IJU-1,JK) - 0.5 * ( & - PDZY(:,IJU,JK) * (ZPHIT(:,IJU-1,JK)-ZPHIT(:,IJU-1,JK-1)) & - / PDZZ(:,IJU-1,JK) & - +PDZY(:,IJU,JK+1) * (ZPHIT(:,IJU-1,JK+1)-ZPHIT(:,IJU-1,JK)) & - / PDZZ(:,IJU-1,JK+1) & + ZDV_SOURCE(:,IJE+1,JK)= & + (ZPHIT(:,IJE+1,JK) - ZPHIT(:,IJE+1-1,JK) - 0.5 * ( & + PDZY(:,IJE+1,JK) * (ZPHIT(:,IJE+1-1,JK)-ZPHIT(:,IJE+1-1,JK-1)) & + / PDZZ(:,IJE+1-1,JK) & + +PDZY(:,IJE+1,JK+1) * (ZPHIT(:,IJE+1-1,JK+1)-ZPHIT(:,IJE+1-1,JK)) & + / PDZZ(:,IJE+1-1,JK+1) & ) & - ) / PDYY(:,IJU,JK) + ) / PDYY(:,IJE+1,JK) END DO END IF END IF ! + CALL MPPDB_CHECK3DM("before MYM PRESSUREZ :PRU/V/WS",PRECISION,PRUS,PRVS,PRWS) IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN PRVS = PRVS - MYM(PRHODJ * XCPD * ZTHETAV) * ZDV_SOURCE ELSEIF(CEQNSYS=='LHE') THEN diff --git a/src/MNH/qlap.f90 b/src/MNH/qlap.f90 index e57eedf46..7e78f44dc 100644 --- a/src/MNH/qlap.f90 +++ b/src/MNH/qlap.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 operators 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ################ MODULE MODI_QLAP @@ -112,7 +111,8 @@ END MODULE MODI_QLAP !! 14/01/97 New anelastic equation ( Stein ) !! 17/12/97 include the case of non-vanishing orography !! at the lbc ( Stein ) -!! 06/12 V.Masson : update_halo due to CONTRAV changes +!! 06/12 V.Masson : update_halo due to CONTRAV changes +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -127,6 +127,8 @@ USE MODI_GDIV USE MODI_GRADIENT_M USE MODI_SHUMAN ! +USE MODE_MPPDB +! IMPLICIT NONE ! !* 0.1 declarations of arguments @@ -161,6 +163,7 @@ INTEGER :: IIU,IJU,IKU ! I,J,K array sizes INTEGER :: JK,JJ,JI ! vertical loop index TYPE(LIST_ll), POINTER :: TZFIELDS_ll ! list of fields to exchange INTEGER :: IINFO_ll +INTEGER :: IIB,IIE,IJB,IJE !------------------------------------------------------------------------------- ! ! @@ -168,57 +171,64 @@ INTEGER :: IINFO_ll ! ------------------------------- ! CALL GET_DIM_EXT_ll('B',IIU,IJU) +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKU=SIZE(PY,3) ! ZU = GX_M_U(1,IKU,1,PY,PDXX,PDZZ,PDZX) +CALL MPPDB_CHECK3D(ZU,'QLAP::ZU',PRECISION) ! IF ( HLBCX(1) /= 'CYCL' .AND. LWEST_ll() ) THEN DO JK=2,IKU-1 DO JJ=1,IJU - ZU(2,JJ,JK)= (PY(2,JJ,JK) - PY(1,JJ,JK) - 0.5 * ( & - PDZX(2,JJ,JK) * (PY(2,JJ,JK)-PY(2,JJ,JK-1)) / PDZZ(2,JJ,JK) & - +PDZX(2,JJ,JK+1) * (PY(2,JJ,JK+1)-PY(2,JJ,JK)) / PDZZ(2,JJ,JK+1) & - ) ) / PDXX(2,JJ,JK) + ZU(IIB,JJ,JK)= (PY(IIB,JJ,JK) - PY(IIB-1,JJ,JK) - 0.5 * ( & + PDZX(IIB,JJ,JK) * (PY(IIB,JJ,JK)-PY(IIB,JJ,JK-1)) / PDZZ(IIB,JJ,JK) & + +PDZX(IIB,JJ,JK+1) * (PY(IIB,JJ,JK+1)-PY(IIB,JJ,JK)) / PDZZ(IIB,JJ,JK+1) & + ) ) / PDXX(IIB,JJ,JK) END DO END DO END IF +CALL MPPDB_CHECK3D(ZU,'QLAP::ZU/W',PRECISION) ! IF ( HLBCX(1) /= 'CYCL' .AND. LEAST_ll() ) THEN DO JK=2,IKU-1 DO JJ=1,IJU - ZU(IIU,JJ,JK)= (PY(IIU,JJ,JK) - PY(IIU-1,JJ,JK) - 0.5 * ( & - PDZX(IIU,JJ,JK) * (PY(IIU-1,JJ,JK)-PY(IIU-1,JJ,JK-1)) / PDZZ(IIU-1,JJ,JK) & - +PDZX(IIU,JJ,JK+1) * (PY(IIU-1,JJ,JK+1)-PY(IIU-1,JJ,JK)) / PDZZ(IIU-1,JJ,JK+1)& - ) ) / PDXX(IIU,JJ,JK) + ZU(IIE+1,JJ,JK)= (PY(IIE+1,JJ,JK) - PY(IIE+1-1,JJ,JK) - 0.5 * ( & + PDZX(IIE+1,JJ,JK) * (PY(IIE+1-1,JJ,JK)-PY(IIE+1-1,JJ,JK-1)) / PDZZ(IIE+1-1,JJ,JK) & + +PDZX(IIE+1,JJ,JK+1) * (PY(IIE+1-1,JJ,JK+1)-PY(IIE+1-1,JJ,JK)) / PDZZ(IIE+1-1,JJ,JK+1)& + ) ) / PDXX(IIE+1,JJ,JK) END DO END DO END IF +CALL MPPDB_CHECK3D(ZU,'QLAP::ZU/E',PRECISION) ! IF(.NOT. L2D) THEN ! ZV = GY_M_V(1,IKU,1,PY,PDYY,PDZZ,PDZY) + CALL MPPDB_CHECK3D(ZV,'QLAP::ZV',PRECISION) ! IF ( HLBCY(1) /= 'CYCL' .AND. LSOUTH_ll() ) THEN DO JK=2,IKU-1 DO JI=1,IIU - ZV(JI,2,JK)= (PY(JI,2,JK) - PY(JI,1,JK) - 0.5 * ( & - PDZY(JI,2,JK) * (PY(JI,2,JK)-PY(JI,2,JK-1)) / PDZZ(JI,2,JK) & - +PDZY(JI,2,JK+1) * (PY(JI,2,JK+1)-PY(JI,2,JK)) / PDZZ(JI,2,JK+1) & - ) ) / PDYY(JI,2,JK) + ZV(JI,IJB,JK)= (PY(JI,IJB,JK) - PY(JI,IJB-1,JK) - 0.5 * ( & + PDZY(JI,IJB,JK) * (PY(JI,IJB,JK)-PY(JI,IJB,JK-1)) / PDZZ(JI,IJB,JK) & + +PDZY(JI,IJB,JK+1) * (PY(JI,IJB,JK+1)-PY(JI,IJB,JK)) / PDZZ(JI,IJB,JK+1) & + ) ) / PDYY(JI,IJB,JK) END DO END DO END IF + CALL MPPDB_CHECK3D(ZV,'QLAP::ZV/S',PRECISION) IF ( HLBCY(1) /= 'CYCL' .AND. LNORTH_ll() ) THEN ! DO JK=2,IKU-1 DO JI=1,IIU - ZV(JI,IJU,JK)= (PY(JI,IJU,JK) - PY(JI,IJU-1,JK) - 0.5 * ( & - PDZY(JI,IJU,JK) * (PY(JI,IJU-1,JK)-PY(JI,IJU-1,JK-1)) / PDZZ(JI,IJU-1,JK) & - +PDZY(JI,IJU,JK+1) * (PY(JI,IJU-1,JK+1)-PY(JI,IJU-1,JK)) / PDZZ(JI,IJU-1,JK+1)& - ) ) / PDYY(JI,IJU,JK) + ZV(JI,IJE+1,JK)= (PY(JI,IJE+1,JK) - PY(JI,IJE+1-1,JK) - 0.5 * ( & + PDZY(JI,IJE+1,JK) * (PY(JI,IJE+1-1,JK)-PY(JI,IJE+1-1,JK-1)) / PDZZ(JI,IJE+1-1,JK) & + +PDZY(JI,IJE+1,JK+1) * (PY(JI,IJE+1-1,JK+1)-PY(JI,IJE+1-1,JK)) / PDZZ(JI,IJE+1-1,JK+1)& + ) ) / PDYY(JI,IJE+1,JK) END DO END DO END IF + CALL MPPDB_CHECK3D(ZV,'QLAP::ZV/N',PRECISION) ! ELSE ZV=0. diff --git a/src/MNH/rad_bound.f90 b/src/MNH/rad_bound.f90 index 12333081a..5c77800b0 100644 --- a/src/MNH/rad_bound.f90 +++ b/src/MNH/rad_bound.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 lbc 2006/06/06 15:29:52 !----------------------------------------------------------------- !#################### MODULE MODI_RAD_BOUND @@ -152,7 +151,8 @@ END MODULE MODI_RAD_BOUND !! Escobar 9/11/2010 : cphas_profile : array bound problem if NO Turb => PTKET optional !! Lac.C. 2011 : Adaptation to FIT temporal scheme !! Modification 06/13 (C.Lac) Introduction of cphase_pbl -!! Modification 03/14 (C.Lac) Replacement of XRIMKMAX by XCARPKMAX +!! Modification 03/14 (C.Lac) Replacement of XRIMKMAX by XCARPKMAX +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -288,13 +288,13 @@ SELECT CASE ( HLBCX(1) ) ! IF ( SIZE(PLBXUS,1) == 0 ) THEN ZLBEU (:,:) = 0. - ZLBGU (:,:) = PLBXUM(2,:,:) - PLBXUM(1,:,:) - ZLBXU(:,:) = PLBXUM(1,:,:) + ZLBGU (:,:) = PLBXUM(JPHEXT+1,:,:) - PLBXUM(JPHEXT,:,:) ! 2 - 1 + ZLBXU(:,:) = PLBXUM(JPHEXT,:,:) ! 1 ELSE - ZLBEU (:,:) = PLBXUS(1,:,:) - ZLBGU (:,:) = PLBXUM(2,:,:) - PLBXUM(1,:,:) + & - PTSTEP * (PLBXUS(2,:,:) - PLBXUS(1,:,:)) - ZLBXU(:,:) = PLBXUM(1,:,:) + PTSTEP * PLBXUS(1,:,:) + ZLBEU (:,:) = PLBXUS(JPHEXT,:,:) ! 1 + ZLBGU (:,:) = PLBXUM(JPHEXT+1,:,:) - PLBXUM(JPHEXT,:,:) + & ! 2 - 1 + PTSTEP * (PLBXUS(JPHEXT+1,:,:) - PLBXUS(JPHEXT,:,:)) ! 2 - 1 + ZLBXU(:,:) = PLBXUM(JPHEXT,:,:) + PTSTEP * PLBXUS(JPHEXT,:,:) ! 1 + 1 END IF ! ! ============================================================ @@ -357,13 +357,13 @@ SELECT CASE ( HLBCX(2) ) ILBX=SIZE(PLBXUM,1) IF (SIZE(PLBXUS,1) == 0 ) THEN ZLBEU (:,:) = 0. - ZLBGU (:,:) = PLBXUM(ILBX,:,:) - PLBXUM(ILBX-1,:,:) - ZLBXU(:,:) = PLBXUM(ILBX,:,:) + ZLBGU (:,:) = PLBXUM(ILBX-JPHEXT+1,:,:) - PLBXUM(ILBX-JPHEXT,:,:) ! ILBX / (ILBX-1 + ZLBXU(:,:) = PLBXUM(ILBX-JPHEXT+1,:,:) ELSE - ZLBEU (:,:) = PLBXUS(ILBX,:,:) - ZLBGU (:,:) = PLBXUM(ILBX,:,:) - PLBXUM(ILBX-1,:,:) + & - PTSTEP * (PLBXUS(ILBX,:,:) - PLBXUS(ILBX-1,:,:)) - ZLBXU(:,:) = PLBXUM(ILBX,:,:) + PTSTEP * PLBXUS(ILBX,:,:) + ZLBEU (:,:) = PLBXUS(ILBX-JPHEXT+1,:,:) + ZLBGU (:,:) = PLBXUM(ILBX-JPHEXT+1,:,:) - PLBXUM(ILBX-JPHEXT,:,:) + & + PTSTEP * (PLBXUS(ILBX-JPHEXT+1,:,:) - PLBXUS(ILBX-JPHEXT,:,:)) + ZLBXU(:,:) = PLBXUM(ILBX-JPHEXT+1,:,:) + PTSTEP * PLBXUS(ILBX-JPHEXT+1,:,:) END IF ! ! ============================================================ @@ -425,13 +425,13 @@ SELECT CASE ( HLBCY(1) ) ! IF ( SIZE(PLBYVS,1) == 0 ) THEN ZLBEV (:,:) = 0. - ZLBGV (:,:) = PLBYVM(:,2,:) - PLBYVM(:,1,:) - ZLBYV(:,:) = PLBYVM(:,1,:) + ZLBGV (:,:) = PLBYVM(:,JPHEXT+1,:) - PLBYVM(:,JPHEXT,:) + ZLBYV(:,:) = PLBYVM(:,JPHEXT,:) ELSE - ZLBEV (:,:) = PLBYVS(:,1,:) - ZLBGV (:,:) = PLBYVM(:,2,:) - PLBYVM(:,1,:) + & - PTSTEP * (PLBYVS(:,2,:) - PLBYVS(:,1,:)) - ZLBYV(:,:) = PLBYVM(:,1,:) + PTSTEP * PLBYVS(:,1,:) + ZLBEV (:,:) = PLBYVS(:,JPHEXT,:) + ZLBGV (:,:) = PLBYVM(:,JPHEXT+1,:) - PLBYVM(:,JPHEXT,:) + & + PTSTEP * (PLBYVS(:,JPHEXT+1,:) - PLBYVS(:,JPHEXT,:)) + ZLBYV(:,:) = PLBYVM(:,JPHEXT,:) + PTSTEP * PLBYVS(:,JPHEXT,:) END IF ! ! ============================================================ @@ -493,13 +493,13 @@ SELECT CASE ( HLBCY(2) ) ILBY=SIZE(PLBYVM,2) IF ( SIZE(PLBYVS,1) == 0 ) THEN ZLBEV (:,:) = 0. - ZLBGV (:,:) = PLBYVM(:,ILBY,:) - PLBYVM(:,ILBY-1,:) - ZLBYV(:,:) = PLBYVM(:,ILBY,:) + ZLBGV (:,:) = PLBYVM(:,ILBY-JPHEXT+1,:) - PLBYVM(:,ILBY-JPHEXT,:) + ZLBYV(:,:) = PLBYVM(:,ILBY-JPHEXT+1,:) ELSE - ZLBEV (:,:) = PLBYVS(:,ILBY,:) - ZLBGV (:,:) = PLBYVM(:,ILBY,:) - PLBYVM(:,ILBY-1,:) + & - PTSTEP * (PLBYVS(:,ILBY,:) - PLBYVS(:,ILBY-1,:)) - ZLBYV(:,:) = PLBYVM(:,ILBY,:) + PTSTEP * PLBYVS(:,ILBY,:) + ZLBEV (:,:) = PLBYVS(:,ILBY-JPHEXT+1,:) + ZLBGV (:,:) = PLBYVM(:,ILBY-JPHEXT+1,:) - PLBYVM(:,ILBY-JPHEXT,:) + & + PTSTEP * (PLBYVS(:,ILBY-JPHEXT+1,:) - PLBYVS(:,ILBY-JPHEXT,:)) + ZLBYV(:,:) = PLBYVM(:,ILBY-JPHEXT+1,:) + PTSTEP * PLBYVS(:,ILBY-JPHEXT+1,:) END IF ! ! ============================================================ diff --git a/src/MNH/radar_simulator.f90 b/src/MNH/radar_simulator.f90 index c0bd0044c..503dcf453 100644 --- a/src/MNH/radar_simulator.f90 +++ b/src/MNH/radar_simulator.f90 @@ -126,6 +126,7 @@ END MODULE MODI_RADAR_SIMULATOR !! for polar output: !! NBAZIM set in nameliste (720) !! ZAZIM_BASE(JAZ)=(0.5+JAZ-1)*ZZSTEP +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -270,11 +271,8 @@ CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) IIU=SIZE(PTEMP,1) IJU=SIZE(PTEMP,2) IKU=SIZE(PTEMP,3) -IIB = JPHEXT + 1 -IJB = JPHEXT + 1 +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = JPVEXT + 1 -IIE = IIU - JPHEXT -IJE = IJU - JPHEXT IKE = IKU - JPVEXT ! convective/stratiform ALLOCATE(GBU_MSK(IIU,IJU,4)) diff --git a/src/MNH/radtr_satel.f90 b/src/MNH/radtr_satel.f90 index b94f5729d..e761e3031 100644 --- a/src/MNH/radtr_satel.f90 +++ b/src/MNH/radtr_satel.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 diag 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ####################### MODULE MODI_RADTR_SATEL @@ -104,6 +103,7 @@ END MODULE MODI_RADTR_SATEL !! ------------- !! Original 29/03/00 !! J.-P. Chaboureau 15/04/03 add call to the subgrid condensation scheme +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -114,6 +114,7 @@ USE MODD_PARAMETERS USE MODD_GRID_n ! USE MODD_RAD_TRANSF +USE MODE_ll ! USE MODI_INIT_NBMOD USE MODI_DETER_ANGLE @@ -274,11 +275,8 @@ X1CO2 = PCCO2 / 44.0 * XMD IIU = SIZE(PTHT,1) IJU = SIZE(PTHT,2) IKU = SIZE(PTHT,3) -IIB = 1 + JPHEXT -IJB = 1 + JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT -IIE = IIU - JPHEXT -IJE = IJU - JPHEXT IKE = IKU - JPVEXT ! IKSTAE = SIZE(PSTATM,1) diff --git a/src/MNH/rain_c2r2_khko.f90 b/src/MNH/rain_c2r2_khko.f90 index 41246839b..1d769c9ac 100644 --- a/src/MNH/rain_c2r2_khko.f90 +++ b/src/MNH/rain_c2r2_khko.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_8 microph 2008/06/27 17:38:00 !----------------------------------------------------------------- ! ###################### MODULE MODI_RAIN_C2R2_KHKO @@ -207,6 +206,7 @@ END MODULE MODI_RAIN_C2R2_KHKO !! C.Lac 06/14 C2R2_SEDIMENTATION replaced by !! KHKO_SEDIMENTATION because of instability !! G.Tanguy 07/14 FUSION C2R2 and KHKO +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -227,6 +227,7 @@ USE MODD_SALT USE MODI_BUDGET ! USE MODE_FM +USE MODE_ll USE MODE_FMWRIT USE MODI_GAMMA ! @@ -417,10 +418,7 @@ CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file !* 1. COMPUTE THE SLOPE PARAMETERS ZLBDC,ZLBDR ! ---------------------------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PZZ,3) - JPVEXT ! @@ -556,6 +554,8 @@ CONTAINS ! !* 0. DECLARATIONS ! ------------ +!JUAN +USE MODI_GET_HALO ! IMPLICIT NONE ! @@ -595,7 +595,7 @@ INTEGER :: J1 ! the radiative tendency and ! the latent heat of vaporization Lv(T) and ! the specific heat for moist air Cph -! +! ZEPS= XMV / XMD ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:) * & EXP(-XALPW+XBETAW/ZT(:,:,:)+XGAMW*ALOG(ZT(:,:,:))) - 1.0) @@ -798,6 +798,7 @@ IF( INUCT >= 1 ) THEN ZZW1(:) = MIN( XCSTDCRIT * ZZW2(:) / ( ((ZZT(:)*ZSMAX(:))**3.)*ZRHODREF(:) ),& 1.E-5 ) END WHERE + CALL GET_HALO(PRVS) ZW(:,:,:) = MIN( UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ),PRVS(:,:,:) ) ! PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) @@ -805,6 +806,9 @@ IF( INUCT >= 1 ) THEN ZW(:,:,:) = ZW(:,:,:)*(XLVTT+(XCPV-XCL)*(ZT(:,:,:)-XTT))/ & (PEXNREF(:,:,:)*( XCPD+XCPV*PRVT(:,:,:)+XCL*(PRCT(:,:,:)+PRRT(:,:,:)))) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:) +!JUAN + CALL GET_HALO(PTHS) + CALL GET_HALO(PRCS) ! ZW(:,:,:) = PCCS(:,:,:) PCCS(:,:,:) = UNPACK( ZZW2(:)+ZCCS(:),MASK=GNUCT(:,:,:),FIELD=ZW(:,:,:) ) diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90 index 0fe9804dc..b746dd739 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! #################### MODULE MODI_RAIN_ICE @@ -247,6 +246,7 @@ END MODULE MODI_RAIN_ICE !! (JP Pinty), 01-2014 : ICE4 : partial reconversion of hail to graupel !! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for !! aircraft, ballon and profiler +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -263,6 +263,7 @@ USE MODD_LES USE MODI_BUDGET USE MODI_GAMMA USE MODE_FMWRIT +USE MODE_ll ! #ifdef MNH_PGI USE MODE_PACK_PGI @@ -466,10 +467,7 @@ INTEGER :: JL ! and PACK intrinsics !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PDZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PDZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=KKA+JPVEXT*KKL IKE=KKU-JPVEXT*KKL IKT=SIZE(PDZZ,3) diff --git a/src/MNH/rain_ice_elec.f90 b/src/MNH/rain_ice_elec.f90 index d01b6e002..7232f206c 100644 --- a/src/MNH/rain_ice_elec.f90 +++ b/src/MNH/rain_ice_elec.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! ######################### MODULE MODI_RAIN_ICE_ELEC @@ -103,7 +102,6 @@ END SUBROUTINE RAIN_ICE_ELEC END INTERFACE END MODULE MODI_RAIN_ICE_ELEC ! -! ######spl SUBROUTINE RAIN_ICE_ELEC (OSEDIC, HSUBG_AUCV, OWARM, & KSPLITR, PTSTEP, KMI, KRR, & PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, & @@ -213,6 +211,7 @@ END MODULE MODI_RAIN_ICE_ELEC !! C. Lac 2011 : Adaptation to FIT temporal scheme !! B. Tsenova June 2012 Add new NI parameterizations !! C. Barthe June 2012 Dependance of RAR on the RELATIVE terminal velocity +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -228,6 +227,7 @@ USE MODD_RAIN_ICE_PARAM USE MODD_PARAM_ICE USE MODD_BUDGET USE MODD_LES +USE MODE_ll ! USE MODD_ELEC_PARAM USE MODD_ELEC_DESCR @@ -557,10 +557,7 @@ REAL :: ZRHO00 ! Surface reference air density !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB = 1 + JPHEXT -IIE = SIZE(PZZ,1) - JPHEXT -IJB = 1 + JPHEXT -IJE = SIZE(PZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKE = SIZE(PZZ,3) - JPVEXT ! diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90 index 71b78799a..c2158e74a 100644 --- a/src/MNH/read_exsegn.f90 +++ b/src/MNH/read_exsegn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_8 2008/07/09 16:40:30 !----------------------------------------------------------------- ! ###################### MODULE MODI_READ_EXSEG_n @@ -273,6 +272,8 @@ END MODULE MODI_READ_EXSEG_n !! Modification 12/2011 (C.Lac) Adaptation to FIT temporal scheme !! Modification 12/2012 (S.Bielli) add NAM_NCOUT for netcdf output !! Modification 02/2012 (Pialat/Tulet) add ForeFire +!! Modification 02/2012 (T.Lunet) add of new Runge-Kutta methods +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !!------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -281,6 +282,7 @@ USE MODD_PARAMETERS USE MODD_CONF USE MODD_CONFZ USE MODD_CONF_n, ONLY : CSTORAGE_TYPE +USE MODD_VAR_ll, ONLY: NPROC ! #ifdef MNH_NCWRIT USE MODD_NCOUT @@ -569,7 +571,7 @@ CALL TEST_NAM_VAR(ILUOUT,'CMET_ADV_SCHEME',CMET_ADV_SCHEME, & CALL TEST_NAM_VAR(ILUOUT,'CSV_ADV_SCHEME',CSV_ADV_SCHEME, & &'PPM_00','PPM_01','PPM_02') CALL TEST_NAM_VAR(ILUOUT,'CTEMP_SCHEME',CTEMP_SCHEME, & - & 'RK11','RK21','RK33','RK53' ) + & 'RK11','RK21','RK33','RKC4','RK53','RK4B','RK62','RK65','NP32','SP32') ! CALL TEST_NAM_VAR(ILUOUT,'CTURB',CTURB,'NONE','TKEL') CALL TEST_NAM_VAR(ILUOUT,'CRAD',CRAD,'NONE','FIXE','ECMW','TOPA') @@ -633,6 +635,9 @@ END IF !* 2. FIRST INITIALIZATIONS ! --------------------- ! +!!!!!!!!!!!!!!!!!!!! TEST CL !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!IF (NPROC==1) JPHEXT=1 +!!!!!!!!!!!!!!!!!!!! TEST CL !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !* 2.1 Time step in gridnesting case ! IF (KMI /= 1 .AND. NDAD(KMI) /= KMI) THEN diff --git a/src/MNH/read_hgridn.f90 b/src/MNH/read_hgridn.f90 index 937c65f36..0473264cf 100644 --- a/src/MNH/read_hgridn.f90 +++ b/src/MNH/read_hgridn.f90 @@ -72,6 +72,7 @@ END MODULE MODI_READ_HGRID_n !! MODIFICATIONS !! ------------- !! Original 26/09/96 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -117,6 +118,7 @@ REAL :: ZLATOR, ZLONOR, ZXHATM, ZYHATM INTEGER :: IIU,IJU INTEGER :: NIMAX2,NJMAX2 !JUAN REALZ +INTEGER :: IJPHEXT ! CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP) ! @@ -203,6 +205,22 @@ IF (CPROGRAM/='IDEAL ') THEN ! routine (as in ini_size_spawn.f90) CALL FMREAD(HFMFILE,'IMAX',CLUOUT,'--',NIMAX,IGRID,ILENCH,YCOMMENT,IRESP) CALL FMREAD(HFMFILE,'JMAX',CLUOUT,'--',NJMAX,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(HFMFILE,'JPHEXT',CLUOUT,'--',IJPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) + IF ( IJPHEXT .NE. JPHEXT ) THEN + IF (CPROGRAM == 'REAL' ) THEN + WRITE(ILUOUT,FMT=*) ' READ_HGRID_N : JPHEXT in PRE_REAL1.nam/NAM_REAL_CONF ( or default value )& + JPHEXT=',JPHEXT + ELSE + WRITE(ILUOUT,FMT=*) ' READ_HGRID_N : JPHEXT in PRE_NEST_PGD1.nam/NAM_CONF_NEST ( or default value )& + JPHEXT=',JPHEXT + END IF + + WRITE(ILUOUT,FMT=*) ' different from PGD files=',HFMFILE ,' value JPHEXT=',IJPHEXT + WRITE(ILUOUT,FMT=*) '-> JOB ABORTED' + CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + END IF END IF ! !* 2.1 Read the configuration (MODD_CONF) diff --git a/src/MNH/read_prc_fmfile.f90 b/src/MNH/read_prc_fmfile.f90 index 0ac1d0881..47c4a4e7f 100644 --- a/src/MNH/read_prc_fmfile.f90 +++ b/src/MNH/read_prc_fmfile.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2007/03/22 18:26:29 !----------------------------------------------------------------- ! ########################### MODULE MODI_READ_PRC_FMFILE @@ -96,6 +95,7 @@ END MODULE MODI_READ_PRC_FMFILE !! 29/11/02 (JP Pinty) add C3R5, ICE2, ICE4 !! 01/2004 (V. Masson) removes surface (externalization) !! 05/2006 Remove EPS +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -161,18 +161,20 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT REAL, DIMENSION(:), ALLOCATABLE :: ZZHAT INTEGER :: IMI - +INTEGER :: IIB, IIE, IJB, IJE !------------------------------------------------------------------------------- ! !* 1. INITIALIZATIONS ! --------------- IMI = GET_CURRENT_MODEL_INDEX() CALL GOTO_MODEL(1) + ! IIU=KISUP-KIINF+1 IJU=KJSUP-KJINF+1 ! ILU=SIZE(XTHT,3) +CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) ! CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! @@ -362,48 +364,48 @@ END IF !* 7. ERASES LATERAL BOUNDARIES ! ------------------------- ! -IF (JPHEXT>1) THEN - WRITE (ILUOUT0,*) 'READ_PRC_FMFILE: abort (JPHEXT= ',JPHEXT,' )' - !callabortstop - CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP) - CALL ABORT - STOP -END IF +!!$IF (JPHEXT>1) THEN +!!$ WRITE (ILUOUT0,*) 'READ_PRC_FMFILE: abort (JPHEXT= ',JPHEXT,' )' +!!$ !callabortstop +!!$ CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP) +!!$ CALL ABORT +!!$ STOP +!!$END IF ! !* 7.1 left boundary I=1+JPHEXT for U ! ------------------------------ ! -IF (IIU>3) XU_LS(2 ,:,:)=2.*XU_LS( 3 ,:,:)-XU_LS( 4 ,:,:) +IF (IIU>3) XU_LS(IIB ,:,:)=2.*XU_LS( IIB+1 ,:,:)-XU_LS( IIB+2 ,:,:) ! !* 7.2 bottom boundary J=1+JPHEXT for V ! -------------------------------- ! -IF (IJU>3) XV_LS(:, 2,:)=2.*XV_LS(:, 3 ,:)-XV_LS(:, 4 ,:) +IF (IJU>3) XV_LS(:, IJB,:)=2.*XV_LS(:, IJB+1 ,:)-XV_LS(:, IJB+2 ,:) ! !* 7.3 all boundaries for all fields except vapor ! ------------------------------------------ ! -XU_LS(1 ,:,:)=2.*XU_LS( 2 ,:,:)-XU_LS( 3 ,:,:) -XU_LS(IIU,:,:)=2.*XU_LS(IIU-1,:,:)-XU_LS(IIU-2,:,:) -XV_LS(1 ,:,:)=2.*XV_LS( 2 ,:,:)-XV_LS( 3 ,:,:) -XV_LS(IIU,:,:)=2.*XV_LS(IIU-1,:,:)-XV_LS(IIU-2,:,:) -XW_LS(1 ,:,:)=2.*XW_LS( 2 ,:,:)-XW_LS( 3 ,:,:) -XW_LS(IIU,:,:)=2.*XW_LS(IIU-1,:,:)-XW_LS(IIU-2,:,:) -XTH_LS(1 ,:,:)=2.*XTH_LS( 2 ,:,:)-XTH_LS( 3 ,:,:) -XTH_LS(IIU,:,:)=2.*XTH_LS(IIU-1,:,:)-XTH_LS(IIU-2,:,:) -XR_LS(1 ,:,:,:)=MAX(2.*XR_LS( 2 ,:,:,:)-XR_LS( 3 ,:,:,:),0.) -XR_LS(IIU,:,:,:)=MAX(2.*XR_LS(IIU-1,:,:,:)-XR_LS(IIU-2,:,:,:),0.) -! -XU_LS(:, 1,:)=2.*XU_LS(:, 2 ,:)-XU_LS(:, 3 ,:) -XU_LS(:,IJU,:)=2.*XU_LS(:,IJU-1,:)-XU_LS(:,IJU-2,:) -XV_LS(:, 1,:)=2.*XV_LS(:, 2 ,:)-XV_LS(:, 3 ,:) -XV_LS(:,IJU,:)=2.*XV_LS(:,IJU-1,:)-XV_LS(:,IJU-2,:) -XW_LS(:, 1,:)=2.*XW_LS(:, 2 ,:)-XW_LS(:, 3 ,:) -XW_LS(:,IJU,:)=2.*XW_LS(:,IJU-1,:)-XW_LS(:,IJU-2,:) -XTH_LS(:, 1,:)=2.*XTH_LS(:, 2 ,:)-XTH_LS(:, 3 ,:) -XTH_LS(:,IJU,:)=2.*XTH_LS(:,IJU-1,:)-XTH_LS(:,IJU-2,:) -XR_LS(:, 1,:,:)=MAX(2.*XR_LS(:, 2 ,:,:)-XR_LS(:, 3 ,:,:),0.) -XR_LS(:,IJU,:,:)=MAX(2.*XR_LS(:,IJU-1,:,:)-XR_LS(:,IJU-2,:,:),0.) +XU_LS(IIB-1 ,:,:)=2.*XU_LS( IIB ,:,:)-XU_LS( IIB+1 ,:,:) +XU_LS(IIE+1,:,:)=2.*XU_LS(IIE,:,:)-XU_LS(IIE-1,:,:) +XV_LS(IIB-1 ,:,:)=2.*XV_LS( IIB ,:,:)-XV_LS( IIB+1 ,:,:) +XV_LS(IIE+1,:,:)=2.*XV_LS(IIE,:,:)-XV_LS(IIE-1,:,:) +XW_LS(IIB-1 ,:,:)=2.*XW_LS( IIB ,:,:)-XW_LS( IIB+1 ,:,:) +XW_LS(IIE+1,:,:)=2.*XW_LS(IIE,:,:)-XW_LS(IIE-1,:,:) +XTH_LS(IIB-1 ,:,:)=2.*XTH_LS( IIB ,:,:)-XTH_LS( IIB+1 ,:,:) +XTH_LS(IIE+1,:,:)=2.*XTH_LS(IIE,:,:)-XTH_LS(IIE-1,:,:) +XR_LS(IIB-1 ,:,:,:)=MAX(2.*XR_LS( IIB ,:,:,:)-XR_LS( IIB+1 ,:,:,:),0.) +XR_LS(IIE+1,:,:,:)=MAX(2.*XR_LS(IIE,:,:,:)-XR_LS(IIE-1,:,:,:),0.) +! +XU_LS(:, IJB-1,:)=2.*XU_LS(:, IJB ,:)-XU_LS(:, IJB+1 ,:) +XU_LS(:,IJE+1,:)=2.*XU_LS(:,IJE,:)-XU_LS(:,IJE-1,:) +XV_LS(:, IJB-1,:)=2.*XV_LS(:, IJB ,:)-XV_LS(:, IJB+1 ,:) +XV_LS(:,IJE+1,:)=2.*XV_LS(:,IJE,:)-XV_LS(:,IJE-1,:) +XW_LS(:, IJB-1,:)=2.*XW_LS(:, IJB ,:)-XW_LS(:, IJB+1 ,:) +XW_LS(:,IJE+1,:)=2.*XW_LS(:,IJE,:)-XW_LS(:,IJE-1,:) +XTH_LS(:, IJB-1,:)=2.*XTH_LS(:, IJB ,:)-XTH_LS(:, IJB+1 ,:) +XTH_LS(:,IJE+1,:)=2.*XTH_LS(:,IJE,:)-XTH_LS(:,IJE-1,:) +XR_LS(:, IJB-1,:,:)=MAX(2.*XR_LS(:, IJB ,:,:)-XR_LS(:, IJB+1 ,:,:),0.) +XR_LS(:,IJE+1,:,:)=MAX(2.*XR_LS(:,IJE,:,:)-XR_LS(:,IJE-1,:,:),0.) ! !* 7.4 all boundaries for vapor (using relative humidity) ! ------------------------ @@ -417,23 +419,23 @@ ELSEWHERE ZHU_LS(:,:,:)=0. END WHERE ! -ZHU_LS(1 ,:,:)=ZHU_LS( 2 ,:,:) -ZHU_LS(IIU,:,:)=ZHU_LS(IIU-1,:,:) -ZHU_LS(:, 1,:)=ZHU_LS(:, 2 ,:) -ZHU_LS(:,IJU,:)=ZHU_LS(:,IJU-1,:) +ZHU_LS(IIB-1 ,:,:)=ZHU_LS( IIB ,:,:) +ZHU_LS(IIE+1,:,:)=ZHU_LS(IIE,:,:) +ZHU_LS(:, IJB-1,:)=ZHU_LS(:, IJB ,:) +ZHU_LS(:,IJE+1,:)=ZHU_LS(:,IJE,:) ! IF (NRR>1) THEN - WHERE (XR_LS(1 ,:,:,2)>0.) - ZHU_LS(1 ,:,:)=100. + WHERE (XR_LS(IIB-1 ,:,:,2)>0.) + ZHU_LS(IIB-1 ,:,:)=100. END WHERE - WHERE (XR_LS(IIU,:,:,2)>0.) - ZHU_LS(IIU,:,:)=100. + WHERE (XR_LS(IIE+1,:,:,2)>0.) + ZHU_LS(IIE+1,:,:)=100. END WHERE - WHERE (XR_LS(:, 1,:,2)>0.) - ZHU_LS(:, 1,:)=100. + WHERE (XR_LS(:, IJB-1,:,2)>0.) + ZHU_LS(:, IJB-1,:)=100. END WHERE - WHERE (XR_LS(:,IJU,:,2)>0.) - ZHU_LS(:,IJU,:)=100. + WHERE (XR_LS(:,IJE+1,:,2)>0.) + ZHU_LS(:,IJE+1,:)=100. END WHERE END IF ! diff --git a/src/MNH/relaxation.f90 b/src/MNH/relaxation.f90 index 1852231c9..423b77e89 100644 --- a/src/MNH/relaxation.f90 +++ b/src/MNH/relaxation.f90 @@ -252,6 +252,7 @@ END MODULE MODI_RELAXATION !! 05/2006 Remove EPS !! 06/2011 (M.Chong) Case of ELEC !! 11/2011 (C.Lac) Adaptation to FIT temporal scheme +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -267,7 +268,10 @@ USE MODD_ELEC_DESCR, ONLY: LRELAX2FW_ION USE MODE_ll ! USE MODI_SHUMAN -USE MODI_BUDGET +USE MODI_BUDGET +USE MODE_EXTRAPOL +! +USE MODE_MPPDB ! ! IMPLICIT NONE @@ -573,62 +577,64 @@ IF ( OHORELAX_UVWTH ) THEN ! IDIMLB = SIZE(PLBXUM,1) IF ( IDIMLB /= 0) THEN - CALL GET_INTERSECTION_ll (1,1,KRIMX+2,IJU_ll, & + CALL GET_INTERSECTION_ll (1,1,KRIMX+JPHEXT+1,IJU_ll, & ! +2 IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN ZWORK(2:IIEINT,:,:) = PLBXUM(1:IIEINT-1,:,:) END IF - CALL GET_INTERSECTION_ll (IIU_ll-KRIMX,1,IIU_ll,IJU_ll, & + CALL GET_INTERSECTION_ll (IIU_ll-KRIMX-JPHEXT+1,1,IIU_ll,IJU_ll, & ! -KRIMX IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN - ZWORK(IIBINT:IIE+1,:,:) = PLBXUM(IDIMLB-(IIE+1-IIBINT):IDIMLB,:,:) + ZWORK(IIBINT:IIE+JPHEXT,:,:) = PLBXUM(IDIMLB-(IIE+JPHEXT-IIBINT):IDIMLB,:,:) ! +1 END IF ENDIF ! IDIMLB = SIZE(PLBYUM,2) IF ( IDIMLB /= 0) THEN - CALL GET_INTERSECTION_ll (1,1,IIU_ll,KRIMY+1, & + CALL GET_INTERSECTION_ll (1,1,IIU_ll,KRIMY+JPHEXT, & ! +1 IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN ZWORK(:,1:IJEINT,:) = PLBYUM(:,1:IJEINT,:) END IF - CALL GET_INTERSECTION_ll (1,IJU_ll-KRIMY,IIU_ll,IJU_ll, & + CALL GET_INTERSECTION_ll (1,IJU_ll-KRIMY-JPHEXT+1,IIU_ll,IJU_ll, & ! -KRIMY IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN - ZWORK(:,IJBINT:IJE+1,:) = PLBYUM(:,IDIMLB-(IJE+1-IJBINT):IDIMLB,:) + ZWORK(:,IJBINT:IJE+JPHEXT,:) = PLBYUM(:,IDIMLB-(IJE+JPHEXT-IJBINT):IDIMLB,:) ! +1 END IF END IF ! + CALL MPPDB_CHECK3DM("before PRUS relax:ZWORK",PRECISION,ZWORK) WHERE (GMASK3D_RELAX) PRUS(:,:,:) = PRUS(:,:,:) - ZKHU(:,:,:)*(PUT(:,:,:)-ZWORK(:,:,:)) & * ZRHODJU(:,:,:) END WHERE + CALL MPPDB_CHECK3DM("after PRUS relax:ZWORK",PRECISION,ZWORK) ! IDIMLB = SIZE(PLBXVM,1) IF ( IDIMLB /= 0) THEN - CALL GET_INTERSECTION_ll (1,1,KRIMX+1,IJU_ll, & + CALL GET_INTERSECTION_ll (1,1,KRIMX+JPHEXT,IJU_ll, & ! +1 IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN ZWORK(1:IIEINT,:,:) = PLBXVM(1:IIEINT,:,:) END IF - CALL GET_INTERSECTION_ll (IIU_ll-KRIMX,1,IIU_ll,IJU_ll, & + CALL GET_INTERSECTION_ll (IIU_ll-KRIMX-JPHEXT+1,1,IIU_ll,IJU_ll, & ! -KRIMX IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN - ZWORK(IIBINT:IIE+1,:,:) = PLBXVM(IDIMLB-(IIE+1-IIBINT):IDIMLB,:,:) + ZWORK(IIBINT:IIE+JPHEXT,:,:) = PLBXVM(IDIMLB-(IIE+JPHEXT-IIBINT):IDIMLB,:,:) ! +1 END IF ENDIF ! IDIMLB = SIZE(PLBYVM,2) IF ( IDIMLB /= 0) THEN - CALL GET_INTERSECTION_ll (1,1,IIU_ll,KRIMY+2, & + CALL GET_INTERSECTION_ll (1,1,IIU_ll,KRIMY+JPHEXT+1, & ! +2 IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN ZWORK(:,2:IJEINT,:) = PLBYVM(:,1:IJEINT-1,:) END IF - CALL GET_INTERSECTION_ll (1,IJU_ll-KRIMY,IIU_ll,IJU_ll, & + CALL GET_INTERSECTION_ll (1,IJU_ll-KRIMY-JPHEXT+1,IIU_ll,IJU_ll, & ! -KRIMY IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN - ZWORK(:,IJBINT:IJE+1,:) = PLBYVM(:,IDIMLB-(IJE+1-IJBINT):IDIMLB,:) + ZWORK(:,IJBINT:IJE+JPHEXT,:) = PLBYVM(:,IDIMLB-(IJE+JPHEXT-IJBINT):IDIMLB,:) ! +1 END IF ENDIF ! @@ -694,6 +700,7 @@ END DO !* 3. STORES FIELDS IN BUDGET ARRAYS ! ------------------------------ ! +CALL EXTRAPOL('W ', PRUS) IF (LBUDGET_U) CALL BUDGET (PRUS,1,'REL_BU_RU') IF (LBUDGET_V) CALL BUDGET (PRVS,2,'REL_BU_RV') IF (LBUDGET_W) CALL BUDGET (PRWS,3,'REL_BU_RW') @@ -788,15 +795,15 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PWORK !work array used to !expand the LB fields IDIMLB = SIZE(PLBX,1) IF ( IDIMLB /= 0) THEN - CALL GET_INTERSECTION_ll (1,1,KRIMX+1,IJU_ll, & + CALL GET_INTERSECTION_ll (1,1,KRIMX+JPHEXT,IJU_ll, & ! +1 IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN PWORK(1:IIEINT,:,:) = PLBX(1:IIEINT,:,:) END IF - CALL GET_INTERSECTION_ll (IIU_ll-KRIMX,1,IIU_ll,IJU_ll, & + CALL GET_INTERSECTION_ll (IIU_ll-KRIMX-JPHEXT+1,1,IIU_ll,IJU_ll, & ! -KRIMX IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN - PWORK(IIBINT:IIE+1,:,:) = PLBX(IDIMLB-(IIE+1-IIBINT):IDIMLB,:,:) + PWORK(IIBINT:IIE+JPHEXT,:,:) = PLBX(IDIMLB-(IIE+JPHEXT-IIBINT):IDIMLB,:,:) ! +1 END IF ENDIF ! @@ -826,15 +833,15 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PWORK !work array used to !expand the LB fields IDIMLB = SIZE(PLBY,2) IF ( IDIMLB /= 0) THEN - CALL GET_INTERSECTION_ll (1,1,IIU_ll,KRIMY+1 ,& + CALL GET_INTERSECTION_ll (1,1,IIU_ll,KRIMY+JPHEXT ,& ! +1 IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN PWORK(:,1:IJEINT,:) = PLBY(:,1:IJEINT,:) END IF - CALL GET_INTERSECTION_ll (1,IJU_ll-KRIMY,IIU_ll,IJU_ll, & + CALL GET_INTERSECTION_ll (1,IJU_ll-KRIMY-JPHEXT+1,IIU_ll,IJU_ll, & ! -KRIMY IIBINT,IJBINT,IIEINT,IJEINT,"EXTE",IINFO_ll) IF ( IINFO_ll == 0 ) THEN - PWORK(:,IJBINT:IJE+1,:) = PLBY(:,IDIMLB-(IJE+1-IJBINT):IDIMLB,:) + PWORK(:,IJBINT:IJE+JPHEXT,:) = PLBY(:,IDIMLB-(IJE+JPHEXT-IJBINT):IDIMLB,:) ! +1 END IF END IF diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index c2a03f97c..42351a7fb 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -249,12 +249,12 @@ END MODULE MODI_RESOLVED_CLOUD !! Add prognostic supersaturation !! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for !! aircraft, ballon and profiler +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ USE MODE_ll -USE MODE_ll USE MODE_FM ! USE MODD_CONF @@ -280,6 +280,7 @@ USE MODI_KHKO_NOTADJUST USE MODI_C3R5_ADJUST USE MODI_SHUMAN USE MODI_BUDGET +USE MODI_GET_HALO ! ! IMPLICIT NONE @@ -404,7 +405,7 @@ INTEGER :: IKB ! INTEGER :: IKE ! INTEGER :: IKU INTEGER :: IINFO_ll ! return code of parallel routine -INTEGER :: JK +INTEGER :: JK,JI ! ! ! @@ -430,10 +431,7 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVS ! scalar tendency for microphysi !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ ! -IIB=1+JPHEXT -IIE=SIZE(PZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PZZ,3) - JPVEXT IKU=SIZE(PZZ,3) @@ -472,35 +470,39 @@ ENDIF ! ! complete the lateral boundaries to avoid possible problems ! -PTHS(IIB-1,:,:) = PTHS(IIB,:,:) -PTHS(IIE+1,:,:) = PTHS(IIE,:,:) -PTHS(:,IJB-1,:) = PTHS(:,IJB,:) -PTHS(:,IJE+1,:) = PTHS(:,IJE,:) +DO JI=1,JPHEXT +PTHS(JI,:,:) = PTHS(IIB,:,:) +PTHS(IIE+JI,:,:) = PTHS(IIE,:,:) +PTHS(:,JI,:) = PTHS(:,IJB,:) +PTHS(:,IJE+JI,:) = PTHS(:,IJE,:) ! -PRS(IIB-1,:,:,:) = PRS(IIB,:,:,:) -PRS(IIE+1,:,:,:) = PRS(IIE,:,:,:) -PRS(:,IJB-1,:,:) = PRS(:,IJB,:,:) -PRS(:,IJE+1,:,:) = PRS(:,IJE,:,:) +PRS(JI,:,:,:) = PRS(IIB,:,:,:) +PRS(IIE+JI,:,:,:) = PRS(IIE,:,:,:) +PRS(:,JI,:,:) = PRS(:,IJB,:,:) +PRS(:,IJE+JI,:,:) = PRS(:,IJE,:,:) +END DO ! ! complete the physical boundaries to avoid some computations ! -IF(LWEST_ll() .AND. HLBCX(1) /= 'CYCL') PRT(IIB-1,:,:,2:) = 0.0 -IF(LEAST_ll() .AND. HLBCX(2) /= 'CYCL') PRT(IIE+1,:,:,2:) = 0.0 -IF(LSOUTH_ll() .AND. HLBCY(1) /= 'CYCL') PRT(:,IJB-1,:,2:) = 0.0 -IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL') PRT(:,IJE+1,:,2:) = 0.0 +IF(LWEST_ll() .AND. HLBCX(1) /= 'CYCL') PRT(:IIB-1,:,:,2:) = 0.0 +IF(LEAST_ll() .AND. HLBCX(2) /= 'CYCL') PRT(IIE+1:,:,:,2:) = 0.0 +IF(LSOUTH_ll() .AND. HLBCY(1) /= 'CYCL') PRT(:,:IJB-1,:,2:) = 0.0 +IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL') PRT(:,IJE+1:,:,2:) = 0.0 ! IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') THEN - ZSVS(IIB-1,:,:,:) = ZSVS(IIB,:,:,:) - ZSVS(IIE+1,:,:,:) = ZSVS(IIE,:,:,:) - ZSVS(:,IJB-1,:,:) = ZSVS(:,IJB,:,:) - ZSVS(:,IJE+1,:,:) = ZSVS(:,IJE,:,:) +DO JI=1,JPHEXT + ZSVS(JI,:,:,:) = ZSVS(IIB,:,:,:) + ZSVS(IIE+JI,:,:,:) = ZSVS(IIE,:,:,:) + ZSVS(:,JI,:,:) = ZSVS(:,IJB,:,:) + ZSVS(:,IJE+JI,:,:) = ZSVS(:,IJE,:,:) +END DO ! ! complete the physical boundaries to avoid some computations ! - IF(LWEST_ll() .AND. HLBCX(1) /= 'CYCL') ZSVT(IIB-1,:,:,:) = 0.0 - IF(LEAST_ll() .AND. HLBCX(2) /= 'CYCL') ZSVT(IIE+1,:,:,:) = 0.0 - IF(LSOUTH_ll() .AND. HLBCY(1) /= 'CYCL') ZSVT(:,IJB-1,:,:) = 0.0 - IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL') ZSVT(:,IJE+1,:,:) = 0.0 + IF(LWEST_ll() .AND. HLBCX(1) /= 'CYCL') ZSVT(:IIB-1,:,:,:) = 0.0 + IF(LEAST_ll() .AND. HLBCX(2) /= 'CYCL') ZSVT(IIE+1:,:,:,:) = 0.0 + IF(LSOUTH_ll() .AND. HLBCY(1) /= 'CYCL') ZSVT(:,:IJB-1,:,:) = 0.0 + IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL') ZSVT(:,IJE+1:,:,:) = 0.0 ENDIF ! ! complete the vertical boundaries @@ -581,6 +583,8 @@ SELECT CASE ( HCLOUD ) ! ! CASE('C2R2','KHKO') + CALL GET_HALO(PRS(:,:,:,2)) + CALL GET_HALO(ZSVS(:,:,:,2)) WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.) ZSVS(:,:,:,1) = 0.0 END WHERE diff --git a/src/MNH/resolved_elecn.f90 b/src/MNH/resolved_elecn.f90 index ca86de7ea..40a40c65b 100644 --- a/src/MNH/resolved_elecn.f90 +++ b/src/MNH/resolved_elecn.f90 @@ -168,6 +168,7 @@ END MODULE MODI_RESOLVED_ELEC_n !! Original 06/11/09 !! Modifications: !! M. Chong 26/01/10 Add Small ions parameters +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -182,7 +183,7 @@ USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZX, XDZY, XDZZ USE MODD_FIELD_n, ONLY : XRSVS USE MODD_CONF, ONLY : L1D, L2D, CEXP USE MODD_CST -USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT +USE MODD_PARAMETERS, ONLY : JPVEXT USE MODD_ELEC_DESCR USE MODD_ELEC_n USE MODD_BUDGET @@ -346,10 +347,7 @@ NULLIFY(TZFIELDS_ll) !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ ! -IIB = 1 + JPHEXT -IIE = SIZE(PZZ,1) - JPHEXT -IJB = 1 + JPHEXT -IJE = SIZE(PZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKE = SIZE(PZZ,3) - JPVEXT IKU = SIZE(PZZ,3) diff --git a/src/MNH/retrieve2_nest_infon.f90 b/src/MNH/retrieve2_nest_infon.f90 index 19456dc12..0f2da4ed0 100644 --- a/src/MNH/retrieve2_nest_infon.f90 +++ b/src/MNH/retrieve2_nest_infon.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 spawn 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ################################ MODULE MODI_RETRIEVE2_NEST_INFO_n @@ -92,6 +91,7 @@ END MODULE MODI_RETRIEVE2_NEST_INFO_n !! Original 25/09/96 !! 22/09/99 PGD modules for dad, and _n module for son !! J Stein 04/07/01 add cartesian case +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -290,13 +290,13 @@ ZPGDYHAT(0) = 2.* XPGDYHAT(1) - XPGDYHAT(2) DO JI=1,NIMAX+2*JPHEXT JIBOX=(JI+KDXRATIO-1-JPHEXT)/KDXRATIO + KXOR ZCOEF= FLOAT(MOD(JI+KDXRATIO-1-JPHEXT,KDXRATIO))/FLOAT(KDXRATIO) - ZXHAT(JI)=(1.-ZCOEF)*ZPGDXHAT(JIBOX)+ZCOEF*ZPGDXHAT(JIBOX+1) + ZXHAT(JI)=(1.-ZCOEF)*ZPGDXHAT(JIBOX+JPHEXT-1)+ZCOEF*ZPGDXHAT(JIBOX+JPHEXT) ! +1 END DO ! DO JJ=1,NJMAX+2*JPHEXT JJBOX=(JJ+KDYRATIO-1-JPHEXT)/KDYRATIO + KYOR ZCOEF= FLOAT(MOD(JJ+KDYRATIO-1-JPHEXT,KDYRATIO))/FLOAT(KDYRATIO) - ZYHAT(JJ)=(1.-ZCOEF)*ZPGDYHAT(JJBOX)+ZCOEF*ZPGDYHAT(JJBOX+1) + ZYHAT(JJ)=(1.-ZCOEF)*ZPGDYHAT(JJBOX+JPHEXT-1)+ZCOEF*ZPGDYHAT(JJBOX+JPHEXT) ! +1 END DO ! IF ( ANY(ABS(XXHAT(:)-ZXHAT(:))>ZEPS) & diff --git a/src/MNH/series_cloud_elec.f90 b/src/MNH/series_cloud_elec.f90 index 03795b618..ffe47a93a 100644 --- a/src/MNH/series_cloud_elec.f90 +++ b/src/MNH/series_cloud_elec.f90 @@ -71,7 +71,7 @@ END MODULE MODI_SERIES_CLOUD_ELEC !! Original : Avril 2010 !! Modifications: !! C. Barthe * LACy * Dec. 2010 add some parameters - +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -199,10 +199,7 @@ JCOUNT_STOP = INT(NTSAVE_SERIES/PTSTEP) ! !* 1.1 beginning and end indexes of the physical subdomain ! -IIB = 1 + JPHEXT -IIE = SIZE(PZZ,1) - JPHEXT -IJB = 1 + JPHEXT -IJE = SIZE(PZZ,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKE = SIZE(PZZ,3) - JPVEXT ! diff --git a/src/MNH/set_advfrc.f90 b/src/MNH/set_advfrc.f90 index bb5b2e563..cd68f4b0b 100644 --- a/src/MNH/set_advfrc.f90 +++ b/src/MNH/set_advfrc.f90 @@ -69,6 +69,7 @@ END MODULE MODI_SETADVFRC !! MODIFICATIONS !! ------------- !! 03/02/10 (Tomasini) USE MODDB_ADVFRC_n for grid-nesting +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -176,10 +177,7 @@ IIU=SIZE(XXHAT) IJU=SIZE(XYHAT) IKU=SIZE(XZHAT) -IIB= 1+ JPHEXT -IIE= IIU-JPHEXT -IJB= 1+ JPHEXT -IJE= IJU-JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB= 1+ JPVEXT IKE= IKU-JPVEXT ! diff --git a/src/MNH/set_cstn.f90 b/src/MNH/set_cstn.f90 index 3f8157a1b..577fbc583 100644 --- a/src/MNH/set_cstn.f90 +++ b/src/MNH/set_cstn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_ideal 2006/05/18 13:07:25 !----------------------------------------------------------------- ! #################### MODULE MODI_SET_CSTN @@ -164,6 +163,7 @@ END MODULE MODI_SET_CSTN !! G. Tanguy 26/10/10 change the interpolation of the RS : we use now a !! mixed grid (PREP_REAL_CASE method) !! V.Masson 12/08/13 Parallelization of the initilization profile +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -183,6 +183,9 @@ USE MODI_VERT_COORD USE MODI_SHUMAN ! USE MODE_ll +USE MODD_PARAMETERS, ONLY : JPHEXT +! +USE MODE_MPPDB ! IMPLICIT NONE ! @@ -323,12 +326,15 @@ CALL VERT_COORD(LSLEVE,ZZS_LS,ZZS_LS,XLEN1,XLEN2,XZHAT,ZZFLUX_MX) ZZMASS_MX(:,:,:)=MZF(1,IKU,1,ZZFLUX_MX) ZZMASS_MX(:,:,IKU)=1.5*ZZFLUX_MX(:,:,IKU)-0.5*ZZFLUX_MX(:,:,IKU-1) ! +CALL MPPDB_CHECK3D(ZZMASS_MX,"SET_CSTN::ZZMASS_MX",PRECISION) +! !* vertical grid at initialization profile location -GPROFILE_IN_PROC=(KILOC-IXOR_ll+1>=IIB .AND. KILOC-IXOR_ll+1<=IIE .AND. KJLOC-IYOR_ll+1>=IJB .AND. KJLOC-IYOR_ll+1 <=IJE) +GPROFILE_IN_PROC=(KILOC+JPHEXT-IXOR_ll+1>=IIB .AND. KILOC+JPHEXT-IXOR_ll+1<=IIE ) & + & .AND. (KJLOC+JPHEXT-IYOR_ll+1>=IJB .AND. KJLOC+JPHEXT-IYOR_ll+1<=IJE) ! IF (GPROFILE_IN_PROC) THEN - ZZMASS_PROFILE(:) = ZZMASS_MX(KILOC-IXOR_ll+1,KJLOC-IYOR_ll+1,:) - ZZFLUX_PROFILE(:) = ZZFLUX_MX(KILOC-IXOR_ll+1,KJLOC-IYOR_ll+1,:) + ZZMASS_PROFILE(:) = ZZMASS_MX(KILOC+JPHEXT-IXOR_ll+1,KJLOC+JPHEXT-IYOR_ll+1,:) + ZZFLUX_PROFILE(:) = ZZFLUX_MX(KILOC+JPHEXT-IXOR_ll+1,KJLOC+JPHEXT-IYOR_ll+1,:) ELSE ZZMASS_PROFILE(:) = 0. ZZFLUX_PROFILE(:) = 0. @@ -413,11 +419,11 @@ ZMRM(:) = SM_PMR_HU(CLUOUT,ZPM(:),ZTVM(:),ZHUM(:), & ! IF (PRESENT(PCORIOZ)) THEN CALL SET_MASS(GPROFILE_IN_PROC, ZZFLUX_PROFILE, & - KILOC,KJLOC,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,& + KILOC+JPHEXT,KJLOC+JPHEXT,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,& ZTHVM,ZMRM,ZUW,ZVW,OSHIFT,OBOUSS,PJ,HFUNU,HFUNV,PCORIOZ=PCORIOZ) ELSE CALL SET_MASS(GPROFILE_IN_PROC, ZZFLUX_PROFILE, & - KILOC,KJLOC,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,& + KILOC+JPHEXT,KJLOC+JPHEXT,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,& ZTHVM,ZMRM,ZUW,ZVW,OSHIFT,OBOUSS,PJ,HFUNU,HFUNV) ENDIF !------------------------------------------------------------------------------- diff --git a/src/MNH/set_dircos.f90 b/src/MNH/set_dircos.f90 index 8b85ddf9a..b7f419708 100644 --- a/src/MNH/set_dircos.f90 +++ b/src/MNH/set_dircos.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 init 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ###################### MODULE MODI_SET_DIRCOS @@ -118,6 +117,7 @@ END MODULE MODI_SET_DIRCOS !! Original 14/02/95 !! (J.Stein) 15/11/95 add the slope angle !! V. DUCROCQ 14/08/98 // +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS diff --git a/src/MNH/set_mass.f90 b/src/MNH/set_mass.f90 index 8c51e04ad..3fef83ef7 100644 --- a/src/MNH/set_mass.f90 +++ b/src/MNH/set_mass.f90 @@ -111,6 +111,7 @@ END MODULE MODI_SET_MASS !! Tout a été modifié pour se rapprocher de PREP_REAL_CASE !! J. Escobar 27/03/2012 modif for reprod sum !! V.Masson 12/08/13 Parallelization of the initilization profile +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- !! @@ -139,6 +140,7 @@ USE MODI_COMPUTE_EXNER_FROM_TOP USE MODI_SET_GEOSBAL USE MODE_REPRO_SUM USE MODE_MPPDB +USE MODE_SUM_ll, ONLY : SUM_DIM1_DD_ll IMPLICIT NONE ! @@ -189,9 +191,9 @@ REAL :: ZDIAG ! diagno REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) :: ZTHV3D ! virtual potential temperature on MESONH grid REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) :: ZPMHP ! pressure minus hyd. pressure on MNH grid with orography (mass level) !* 0.2.3 for wind (application of HFUNU/HFUNV) -REAL, DIMENSION(SIZE(XXHAT),1,1) :: ZNFLX_TOT ! total normalized mass flux +!!$REAL, DIMENSION(SIZE(XXHAT),1,1) :: ZNFLX_TOT ! total normalized mass flux REAL, DIMENSION(SIZE(XYHAT),SIZE(XZHAT)) :: ZUYZ ! vertical variations for U -REAL, DIMENSION(1,SIZE(XYHAT),1) :: ZNFLY_TOT ! total normalized mass flux +!!$REAL, DIMENSION(1,SIZE(XYHAT),1) :: ZNFLY_TOT ! total normalized mass flux REAL, DIMENSION(SIZE(XXHAT),SIZE(XZHAT)) :: ZVXZ ! vertical variations for V REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFLX_TOT_ll,ZNFLY_TOT_ll INTEGER :: IXOR_ll,IYOR_ll! origin's coordinates of extended subdomain @@ -213,6 +215,10 @@ REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) :: ZRHODJV ! the M REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) :: ZHEXNFLUX ! local hyd. Exner function at flux points (MNH grid) REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) :: ZHEXNMASS ! local hyd. Exner function at mass points (MNH grid) REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) :: ZRHOD ! dry density on MESO-NH grid +! +!!$INTEGER :: IIBP,IIEP,IJBP,IJEP +REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFLXZ_TOT,ZNFLYZ_TOT +REAL, DIMENSION(:) , ALLOCATABLE :: ZNFLXZ_TOT_ll,ZNFLYZ_TOT_ll ! total normalized mass flux !------------------------------------------------------------------------------- !------------------------------------------------------------------------------- ! @@ -223,10 +229,8 @@ REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) :: ZRHOD ! dry d IIU=SIZE(XXHAT) IJU=SIZE(XYHAT) IKU=SIZE(XZHAT) -IIB=JPHEXT+1 -IIE=IIU-JPHEXT -IJB=JPHEXT+1 -IJE=IJU-JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) +!!$CALL GET_PHYSICAL_ll(IIBP,IJBP,IIEP,IJEP) IKE=IKU-JPVEXT ZRADSDG = XPI/180. ! @@ -280,7 +284,6 @@ XEXNTOP=SUM_DD_R2_ll(ZHEXNFLUX_MX(IIB:IIE,IJB:IJE,IKE+1))/FLOAT(NIMAX_ll*NJMAX_l ! CALL GET_OR_ll('B',IXOR_ll,IYOR_ll) ! - IF (OPROFILE_IN_PROC) THEN ZRHOD_PROFILE(:) = ZRHOD_MX(KILOC-IXOR_ll+1,KJLOC-IYOR_ll+1,:) ELSE @@ -338,22 +341,38 @@ END SELECT ZDZZFLUX_MX(2:IKU) = PZFLUX_PROFILE(2:IKU)-PZFLUX_PROFILE(1:IKU-1) ZDZZFLUX_MX(1) = ZDZZFLUX_MX(2) ! -ZNFLX_TOT = 0. +!!$ZNFLX_TOT = 0. +!!$DO JK = 2,IKU-1 +!!$ DO JJ=IJB,IJE +!!$ ZNFLX_TOT(:,1,1)=ZNFLX_TOT(:,1,1)+ZDYY(:,JJ,JK)*ZUYZ(JJ,JK)*ZDZZFLUX_MX(JK)* & +!!$ ZRHOD_PROFILE(JK) +!!$ END DO +!!$END DO +!JUAN +ALLOCATE(ZNFLXZ_TOT(IIU,IJU)) +ZNFLXZ_TOT = 0. DO JK = 2,IKU-1 - DO JJ=2,IJU-1 - ZNFLX_TOT(:,1,1)=ZNFLX_TOT(:,1,1)+ZDYY(:,JJ,JK)*ZUYZ(JJ,JK)*ZDZZFLUX_MX(JK)* & + DO JJ=IJB,IJE + ZNFLXZ_TOT(:,JJ)=ZNFLXZ_TOT(:,JJ)+ZDYY(:,JJ,JK)*ZUYZ(JJ,JK)*ZDZZFLUX_MX(JK)* & ZRHOD_PROFILE(JK) END DO END DO ! -ALLOCATE(ZNFLX_TOT_ll(IIU_ll,1)) -CALL SUM_DIM1_ll(ZNFLX_TOT,ZNFLX_TOT_ll,IINFO_ll) -ZNFLX_TOT_ll=SIGN(1.,ZNFLX_TOT_ll)*MAX(ABS(ZNFLX_TOT_ll),TINY(ZNFLX_TOT_ll)) +!!$ALLOCATE(ZNFLX_TOT_ll(IIU_ll,1)) +!!$CALL SUM_DIM1_ll(ZNFLX_TOT,ZNFLX_TOT_ll,IINFO_ll) +!!$ZNFLX_TOT_ll=SIGN(1.,ZNFLX_TOT_ll)*MAX(ABS(ZNFLX_TOT_ll),TINY(ZNFLX_TOT_ll)) ! +ALLOCATE(ZNFLXZ_TOT_ll(IIU_ll)) +CALL SUM_DIM1_DD_ll(ZNFLXZ_TOT,ZNFLXZ_TOT_ll,KDIM=2,KINFO=IINFO_ll) +ZNFLXZ_TOT_ll=SIGN(1.,ZNFLXZ_TOT_ll)*MAX(ABS(ZNFLXZ_TOT_ll),TINY(ZNFLXZ_TOT_ll)) + DO JI=1,IIU - ZUW3D_MX(JI,:,:)=ZUYZ(:,:)* ( ZNFLX_TOT_ll(KILOC,1)/ZNFLX_TOT_ll(IXOR_ll-1+JI,1) ) ! add () for reproductibility +!!$ ZUW3D_MX(JI,:,:)=ZUYZ(:,:)* ( ZNFLX_TOT_ll(KILOC,1)/ZNFLX_TOT_ll(IXOR_ll-1+JI,1) ) ! add () for reproductibility + ZUW3D_MX(JI,:,:)=ZUYZ(:,:)* ( ZNFLXZ_TOT_ll(KILOC)/ZNFLXZ_TOT_ll(IXOR_ll-1+JI) ) END DO -DEALLOCATE(ZNFLX_TOT_ll) + +!!$DEALLOCATE(ZNFLX_TOT_ll) +DEALLOCATE(ZNFLXZ_TOT,ZNFLXZ_TOT_ll) ! ! SELECT CASE(HFUNV) @@ -371,23 +390,42 @@ SELECT CASE(HFUNV) ZVXZ(:,:)=FUNVXZ(IIU,IKU,PZFLUX_PROFILE(:)) END SELECT ! -ZNFLY_TOT = 0. +!!$ZNFLY_TOT = 0. +!!$DO JK = 2,IKU-1 +!!$ DO JI=IIB,IIE +!!$ ZNFLY_TOT(1,:,1) = ZNFLY_TOT(1,:,1) + ZDXX(JI,:,JK)*ZVXZ(JI,JK)* ZDZZFLUX_MX(JK)* & +!!$ ZRHOD_PROFILE(JK) +!!$ END DO +!!$END DO +! +ALLOCATE(ZNFLYZ_TOT(IIU,IJU)) +ZNFLYZ_TOT = 0. DO JK = 2,IKU-1 - DO JI=2,IIU-1 - ZNFLY_TOT(1,:,1) = ZNFLY_TOT(1,:,1) + ZDXX(JI,:,JK)*ZVXZ(JI,JK)* ZDZZFLUX_MX(JK)* & + DO JI=IIB,IIE + ZNFLYZ_TOT(JI,:) = ZNFLYZ_TOT(JI,:) + ZDXX(JI,:,JK)*ZVXZ(JI,JK)* ZDZZFLUX_MX(JK)* & ZRHOD_PROFILE(JK) END DO END DO ! -ALLOCATE(ZNFLY_TOT_ll(IJU_ll,1)) -CALL SUM_DIM1_ll(ZNFLY_TOT,ZNFLY_TOT_ll,IINFO_ll) -ZNFLY_TOT_ll=SIGN(1.,ZNFLY_TOT_ll)*MAX(ABS(ZNFLY_TOT_ll),TINY(ZNFLY_TOT_ll)) +!!$ALLOCATE(ZNFLY_TOT_ll(IJU_ll,1)) +!!$CALL SUM_DIM1_ll(ZNFLY_TOT,ZNFLY_TOT_ll,IINFO_ll) +!!$ZNFLY_TOT_ll=SIGN(1.,ZNFLY_TOT_ll)*MAX(ABS(ZNFLY_TOT_ll),TINY(ZNFLY_TOT_ll)) +! +ALLOCATE(ZNFLYZ_TOT_ll(IJU_ll)) +CALL SUM_DIM1_DD_ll(ZNFLYZ_TOT,ZNFLYZ_TOT_ll,KDIM=1,KINFO=IINFO_ll) +ZNFLYZ_TOT_ll=SIGN(1.,ZNFLYZ_TOT_ll)*MAX(ABS(ZNFLYZ_TOT_ll),TINY(ZNFLYZ_TOT_ll)) ! ! DO JJ=1,IJU - ZVW3D_MX(:,JJ,:)= ZVXZ(:,:) * ( ZNFLY_TOT_ll(KJLOC,1)/ZNFLY_TOT_ll(IYOR_ll-1+JJ,1) ) ! add () for reproductibility +!!$ ZVW3D_MX(:,JJ,:)= ZVXZ(:,:) * ( ZNFLY_TOT_ll(KJLOC,1)/ZNFLY_TOT_ll(IYOR_ll-1+JJ,1) ) ! add () for reproductibility + ZVW3D_MX(:,JJ,:)= ZVXZ(:,:) * ( ZNFLYZ_TOT_ll(KJLOC)/ZNFLYZ_TOT_ll(IYOR_ll-1+JJ) ) END DO -DEALLOCATE(ZNFLY_TOT_ll) + + CALL MPPDB_CHECK3DM("SET_MASS:ZUW3D_MX,ZVW3D_MX",PRECISION,& + & ZUW3D_MX,ZVW3D_MX ) + +!!$DEALLOCATE(ZNFLY_TOT_ll) +DEALLOCATE(ZNFLYZ_TOT,ZNFLYZ_TOT_ll) ! !------------------------------------------------------------------------------- !* 3. INTERPOLATION ON MNH GRID @@ -428,6 +466,8 @@ ELSE ! ZRHODU_MX=ZUW3D_MX*ZRHOD_MX ZRHODV_MX=ZVW3D_MX*ZRHOD_MX + CALL MPPDB_CHECK3DM("SET_MASS:ZRHODU_MX,ZRHODV_MX,PZFLUX_MX,PZMASS_MX",PRECISION,& + & ZRHODU_MX,ZRHODV_MX,PZFLUX_MX,PZMASS_MX ) CALL VER_INT_DYN(OSHIFT,ZRHODU_MX,ZRHODV_MX,PZFLUX_MX,PZMASS_MX,PZS_MX,ZRHODUA,ZRHODVA) ZRHODJU(:,:,:)=MXM(ZRHODUA(:,:,:)*PJ(:,:,:)) ZRHODJV(:,:,:)=MYM(ZRHODVA(:,:,:)*PJ(:,:,:)) @@ -438,7 +478,9 @@ ELSE XUT(:,:,:)=ZRHODJU(:,:,:)/MXM(ZRHOD(:,:,:)*PJ(:,:,:)) XVT(:,:,:)=ZRHODJV(:,:,:)/MYM(ZRHOD(:,:,:)*PJ(:,:,:)) XWT(:,:,:)=0 -ENDIF + CALL MPPDB_CHECK3DM("SET_MASS:XVT,ZRHODJV,PJ,ZRHODVA",PRECISION,& + & XVT,ZRHODJV,PJ,ZRHODVA ) + ENDIF ! !------------------------------------------------------------------------------- diff --git a/src/MNH/set_msk.f90 b/src/MNH/set_msk.f90 index b466c3520..acc8752bb 100644 --- a/src/MNH/set_msk.f90 +++ b/src/MNH/set_msk.f90 @@ -71,6 +71,7 @@ END MODULE MODI_SET_MSK !! Biju Thomas 29/03/99 Identified nonprecipitating convective cells and only !! precipitating anvils as stratiform part !! O. Caumont 09/04/08 Use in RADAR_SIMULATOR +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -133,11 +134,7 @@ IKB = 1 + JPVEXT IKE = SIZE(PRT,3) - JPVEXT IIU = SIZE(PRT,1) IJU = SIZE(PRT,2) -IIB= 1+ JPHEXT -IJB=1+JPHEXT -IIE=IIU- JPHEXT -IJE=IJU- JPHEXT - +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! ! ---------------------- ALLOCATE( ZMASK(IIU,IJU,4) ) diff --git a/src/MNH/set_perturb.f90 b/src/MNH/set_perturb.f90 index 3281b97a1..0437f0817 100644 --- a/src/MNH/set_perturb.f90 +++ b/src/MNH/set_perturb.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_ideal 2007/02/19 15:33:24 !----------------------------------------------------------------- ! ####################### MODULE MODI_SET_PERTURB @@ -94,6 +93,7 @@ END MODULE MODI_SET_PERTURB !! I. Mallet 06/06 cleaning (namelist inside the routine) !! J.Escobar 25/03/2012 optim. parallelization of White noise !! J.Escobar 27/03/2012 force identical random seed & correct XOR/YOR global shift +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -410,9 +410,9 @@ SELECT CASE(CPERT_KIND) END IF ! DO JJ = IJB,IJE - JJ_ll = JJ + IYOR-JPHEXT + JJ_ll = JJ + IYOR-1 DO JI = IIB,IIE - JI_ll = JI + IXOR-JPHEXT + JI_ll = JI + IXOR-1 ZWHITE(JI,JJ) = ZWHITE(JI,JJ)+ & (ZBL+ZDL)*ZSX_ll(JI_ll,JX)*ZCY_ll(JJ_ll,JY) + & (ZAL+ZCL)*ZCX_ll(JI_ll,JX)*ZCY_ll(JJ_ll,JY) + & diff --git a/src/MNH/set_relfrc.f90 b/src/MNH/set_relfrc.f90 index 997726ee2..397d333aa 100644 --- a/src/MNH/set_relfrc.f90 +++ b/src/MNH/set_relfrc.f90 @@ -69,6 +69,7 @@ END MODULE MODI_SET_RELFRC !! MODIFICATIONS !! ------------- !! 03/02/10 (Tomasini) USE MODD_RELFRC_n for grid-nesting +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -177,10 +178,7 @@ IIU=SIZE(XXHAT) IJU=SIZE(XYHAT) IKU=SIZE(XZHAT) -IIB= 1+ JPHEXT -IIE= IIU-JPHEXT -IJB= 1+ JPHEXT -IJE= IJU-JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! allocation ! ! print*,"! temporary forcing alloation" diff --git a/src/MNH/set_rsou.f90 b/src/MNH/set_rsou.f90 index b1aa7537d..35cce87c8 100644 --- a/src/MNH/set_rsou.f90 +++ b/src/MNH/set_rsou.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_ideal 2006/07/06 15:16:36 !----------------------------------------------------------------- ! #################### MODULE MODI_SET_RSOU @@ -245,6 +244,7 @@ END MODULE MODI_SET_RSOU !! mixed grid (PREP_REAL_CASE method) !! add PUVTHU case !! V.Masson 12/08/13 Parallelization of the initilization profile +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -274,6 +274,8 @@ USE MODI_VERT_COORD USE MODI_TH_R_FROM_THL_RT_1D USE MODI_COMPUTE_EXNER_FROM_GROUND ! +USE MODD_PARAMETERS, ONLY : JPHEXT +! IMPLICIT NONE ! ! @@ -1157,11 +1159,12 @@ ZZMASS_MX(:,:,IKU)=1.5*ZZFLUX_MX(:,:,IKU)-0.5*ZZFLUX_MX(:,:,IKU-1) !* 3.2 Interpolate and extrapolate U and V on w- mixed grid levels ! !* vertical grid at initialization profile location -GPROFILE_IN_PROC=(KILOC-IXOR_ll+1>=IIB .AND. KILOC-IXOR_ll+1<=IIE .AND. KJLOC-IYOR_ll+1>=IJB .AND. KJLOC-IYOR_ll+1 <=IJE) +GPROFILE_IN_PROC=(KILOC+JPHEXT-IXOR_ll+1>=IIB .AND. KILOC+JPHEXT-IXOR_ll+1<=IIE) & + & .AND. (KJLOC+JPHEXT-IYOR_ll+1>=IJB .AND. KJLOC+JPHEXT-IYOR_ll+1<=IJE) ! IF (GPROFILE_IN_PROC) THEN - ZZMASS_PROFILE(:) = ZZMASS_MX(KILOC-IXOR_ll+1,KJLOC-IYOR_ll+1,:) - ZZFLUX_PROFILE(:) = ZZFLUX_MX(KILOC-IXOR_ll+1,KJLOC-IYOR_ll+1,:) + ZZMASS_PROFILE(:) = ZZMASS_MX(KILOC+JPHEXT-IXOR_ll+1,KJLOC+JPHEXT-IYOR_ll+1,:) + ZZFLUX_PROFILE(:) = ZZFLUX_MX(KILOC+JPHEXT-IXOR_ll+1,KJLOC+JPHEXT-IYOR_ll+1,:) ELSE ZZMASS_PROFILE(:) = 0. ZZFLUX_PROFILE(:) = 0. @@ -1264,12 +1267,12 @@ DEALLOCATE(ZMRT) ! ------------------------------------------------- IF (PRESENT(PCORIOZ)) THEN CALL SET_MASS(GPROFILE_IN_PROC, ZZFLUX_PROFILE, & - KILOC,KJLOC,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,& + KILOC+JPHEXT,KJLOC+JPHEXT,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,& ZTHVM,ZMRM,ZUW,ZVW,OSHIFT,OBOUSS,PJ,HFUNU,HFUNV,& PMRCM=ZMRCM,PMRIM=ZMRIM,PCORIOZ=PCORIOZ) ELSE CALL SET_MASS(GPROFILE_IN_PROC, ZZFLUX_PROFILE, & - KILOC,KJLOC,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,& + KILOC+JPHEXT,KJLOC+JPHEXT,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,& ZTHVM,ZMRM,ZUW,ZVW,OSHIFT,OBOUSS,PJ,HFUNU,HFUNV,& PMRCM=ZMRCM,PMRIM=ZMRIM) ENDIF diff --git a/src/MNH/shuman.f90 b/src/MNH/shuman.f90 index de22d2bed..75d67e1e6 100644 --- a/src/MNH/shuman.f90 +++ b/src/MNH/shuman.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 operators 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ################## MODULE MODI_SHUMAN @@ -150,6 +149,8 @@ END MODULE MODI_SHUMAN !! Original 04/07/94 !! Modification to include the periodic case 13/10/94 J.Stein !! optimisation 20/08/00 J. Escobar +!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -186,7 +187,7 @@ IIU = SIZE(PA,1) IJU = SIZE(PA,2) IKU = SIZE(PA,3) ! -JIJKOR = 1 + JPHEXT +JIJKOR = 1 + 1 ! JPHEXT JIJKEND = IIU*IJU*IKU ! !CDIR NODEP @@ -198,7 +199,8 @@ END DO !CDIR NODEP !OCL NOVREC DO JJK=1,IJU*IKU - PMXF(IIU,JJK,1) = PMXF(2*JPHEXT,JJK,1) + PMXF(IIU,JJK,1) = PMXF(2*JPHEXT,JJK,1) + PMXF(IIU-JPHEXT+1,JJK,1) = PMXF(JPHEXT+1,JJK,1) ! for reprod JPHEXT <> 1 END DO ! !------------------------------------------------------------------------------- @@ -249,6 +251,8 @@ END FUNCTION MXF !! Original 04/07/94 !! Modification to include the periodic case 13/10/94 J.Stein !! optimisation 20/08/00 J. Escobar +!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -283,7 +287,7 @@ IIU = SIZE(PA,1) IJU = SIZE(PA,2) IKU = SIZE(PA,3) ! -JIJKOR = 1 + JPHEXT +JIJKOR = 1 + 1 ! JPHEXT JIJKEND = IIU*IJU*IKU ! !CDIR NODEP @@ -295,7 +299,8 @@ END DO !CDIR NODEP !OCL NOVREC DO JJK=1,IJU*IKU - PMXM(1,JJK,1) = PMXM(IIU-2*JPHEXT+1,JJK,1) + PMXM(1,JJK,1) = PMXM(IIU-2*JPHEXT+1,JJK,1) + PMXM(JPHEXT,JJK,1) = PMXM(IIU-JPHEXT,JJK,1) ! for reprod JPHEXT <> 1 END DO ! !------------------------------------------------------------------------------- @@ -346,6 +351,8 @@ END FUNCTION MXM !! Original 04/07/94 !! Modification to include the periodic case 13/10/94 J.Stein !! optimisation 20/08/00 J. Escobar +!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -391,7 +398,8 @@ DO JIJK=JIJKOR , JIJKEND PMYF(JIJK-IIU,1,1) = 0.5*( PA(JIJK-IIU,1,1)+PA(JIJK,1,1) ) END DO ! -PMYF(:,IJU,:) = PMYF(:,2*JPHEXT,:) +PMYF(:,IJU,:) = PMYF(:,2*JPHEXT,:) +PMYF(:,IJU-JPHEXT+1,:) = PMYF(:,JPHEXT+1,:) ! for reprod JPHEXT <> 1 ! ! !------------------------------------------------------------------------------- @@ -442,6 +450,8 @@ END FUNCTION MYF !! Original 04/07/94 !! Modification to include the periodic case 13/10/94 J.Stein !! optimisation 20/08/00 J. Escobar +!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -484,7 +494,8 @@ DO JIJK=JIJKOR , JIJKEND PMYM(JIJK,1,1) = 0.5*( PA(JIJK,1,1)+PA(JIJK-IIU,1,1) ) END DO ! -PMYM(:,1,:) = PMYM(:,IJU-2*JPHEXT+1,:) +PMYM(:,1,:) = PMYM(:,IJU-2*JPHEXT+1,:) +PMYM(:,JPHEXT,:) = PMYM(:,IJU-JPHEXT,:) ! for reprod JPHEXT <> 1 ! !------------------------------------------------------------------------------- ! @@ -579,7 +590,7 @@ END DO !CDIR NODEP !OCL NOVREC DO JIJ=1,IIU*IJU - PMZF(JIJ,1,IKU) = -999. + PMZF(JIJ,1,IKU) = PMZF(JIJ,1,IKU-1) !-999. END DO ! !------------------------------------------------------------------------------- @@ -724,6 +735,8 @@ END FUNCTION MZM !! Original 05/07/94 !! Modification to include the periodic case 13/10/94 J.Stein !! optimisation 20/08/00 J. Escobar +!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -760,7 +773,7 @@ IIU = SIZE(PA,1) IJU = SIZE(PA,2) IKU = SIZE(PA,3) ! -JIJKOR = 1 + JPHEXT +JIJKOR = 1 + 1 ! JPHEXT JIJKEND = IIU*IJU*IKU ! !CDIR NODEP @@ -772,7 +785,8 @@ END DO !CDIR NODEP !OCL NOVREC DO JJK=1,IJU*IKU - PDXF(IIU,JJK,1) = PDXF(2*JPHEXT,JJK,1) + PDXF(IIU,JJK,1) = PDXF(2*JPHEXT,JJK,1) + PDXF(IIU-JPHEXT+1,JJK,1) = PDXF(JPHEXT+1,JJK,1) ! for reprod JPHEXT <> 1 END DO ! !------------------------------------------------------------------------------- @@ -871,7 +885,8 @@ END DO !CDIR NODEP !OCL NOVREC DO JJK=1,IJU*IKU - PDXM(1,JJK,1) = PDXM(IIU-2*JPHEXT+1,JJK,1) + PDXM(1,JJK,1) = PDXM(IIU-2*JPHEXT+1,JJK,1) + PDXM(JPHEXT,JJK,1) = PDXM(IIU-JPHEXT,JJK,1) ! for reprod JPHEXT <> 1 END DO ! !------------------------------------------------------------------------------- @@ -922,6 +937,8 @@ END FUNCTION DXM !! Original 05/07/94 !! Modification to include the periodic case 13/10/94 J.Stein !! optimisation 20/08/00 J. Escobar +!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -967,7 +984,8 @@ DO JIJK=JIJKOR , JIJKEND PDYF(JIJK-IIU,1,1) = PA(JIJK,1,1) - PA(JIJK-IIU,1,1) END DO ! -PDYF(:,IJU,:) = PDYF(:,2*JPHEXT,:) +PDYF(:,IJU,:) = PDYF(:,2*JPHEXT,:) +PDYF(:,IJU-JPHEXT+1,:) = PDYF(:,JPHEXT+1,:) ! for reprod JPHEXT <> 1 ! !------------------------------------------------------------------------------- ! @@ -1017,6 +1035,8 @@ END FUNCTION DYF !! Original 05/07/94 !! Modification to include the periodic case 13/10/94 J.Stein !! optimisation 20/08/00 J. Escobar +!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -1062,7 +1082,8 @@ DO JIJK=JIJKOR , JIJKEND PDYM(JIJK,1,1) = PA(JIJK,1,1) - PA(JIJK-IIU,1,1) END DO ! -PDYM(:,1,:) = PDYM(:,IJU-2*JPHEXT+1,:) +PDYM(:,1,:) = PDYM(:,IJU-2*JPHEXT+1,:) +PDYM(:,JPHEXT,:) = PDYM(:,IJU-JPHEXT,:) ! for reprod JPHEXT <> 1 ! ! !------------------------------------------------------------------------------- diff --git a/src/MNH/slow_terms.f90 b/src/MNH/slow_terms.f90 index 8c1b635aa..b8a314e36 100644 --- a/src/MNH/slow_terms.f90 +++ b/src/MNH/slow_terms.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 microph 2006/10/17 17:03:56 !----------------------------------------------------------------- ! ###################### MODULE MODI_SLOW_TERMS @@ -154,6 +153,7 @@ END MODULE MODI_SLOW_TERMS !! of the number of exponentiations !! 14/09/97 (V. Masson) removes low rr non-physical values !! 06/11/02 (V. Masson) update the budget calls +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -279,7 +279,8 @@ DO JN=1,KSPLITR IC = 0 DO JJ = 1,SIZE( ZW1,2) DO JI = 1,SIZE( ZW1,1) - IF (ZW1(JI,JJ,JK)+ZW1(JI,JJ,JK+1)>0.) THEN + IF ( ( ZW1(JI,JJ,JK+1)>0. ) .AND. ( ZW1(JI,JJ,JK)>0. ) ) THEN +!!$ IF ( (ZW1(JI,JJ,JK)+ZW1(JI,JJ,JK+1)>0.) ) THEN IC = IC +1 I1(IC) = JI I2(IC) = JJ diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90 index c22af3bbb..27c6c23bd 100644 --- a/src/MNH/spawn_grid2.f90 +++ b/src/MNH/spawn_grid2.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 spawn 2006/05/23 15:34:13 !----------------------------------------------------------------- !###################### MODULE MODI_SPAWN_GRID2 @@ -148,6 +147,7 @@ END MODULE MODI_SPAWN_GRID2 !! to avoid problem when Input parameter and GRID1 parameter !! are exactly the same !!! !! Modification 20/05/06 Remove Clark and Farley interpolation +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -208,8 +208,8 @@ REAL :: ZPOND1,ZPOND2 ! interpolation coefficients ! INTEGER :: IIU ! Upper dimension in x direction INTEGER :: IJU ! Upper dimension in y direction -INTEGER :: IIB ! indice I Beginning in x direction -INTEGER :: IJB ! indice J Beginning in y direction +INTEGER :: IIB,IIE ! indice I Beginning/End in x direction +INTEGER :: IJB,IJE ! indice J Beginning/End in y direction INTEGER :: IIS,IJS ! indices I and J in x and y dir. for scalars INTEGER :: JI,JEPSX ! Loop index in x direction INTEGER :: JJ,JEPSY ! Loop index in y direction @@ -234,8 +234,7 @@ CALL GOTO_MODEL(2) ! IIU = SIZE(PXHAT) IJU = SIZE(PYHAT) -IIB = 1+JPHEXT -IJB = 1+JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! !* 1.2 recovers logical unit number of output listing ! @@ -297,7 +296,7 @@ ELSE ZPOND2 = FLOAT(JEPSX-1)/FLOAT(KDXRATIO) ZPOND1 = 1.-ZPOND2 DO JI = KXOR,KXEND - IIS = IIB+JEPSX-1+(JI-KXOR-1)*KDXRATIO + IIS = IIB+JEPSX-1+(JI-KXOR-JPHEXT)*KDXRATIO ! IF (1 <= IIS .AND. IIS <= IIU) & PXHAT(IIS) = ZPOND1*ZXHAT_EXTENDED(JI) +ZPOND2*ZXHAT_EXTENDED(JI+1) @@ -313,7 +312,7 @@ ELSE ZPOND2 = FLOAT(JEPSY-1)/FLOAT(KDYRATIO) ZPOND1 = 1.-ZPOND2 DO JJ = KYOR,KYEND - IJS = IJB+JEPSY-1+(JJ-KYOR-1)*KDYRATIO + IJS = IJB+JEPSY-1+(JJ-KYOR-JPHEXT)*KDYRATIO ! IF (1 <= IJS .AND. IJS <= IJU) & PYHAT(IJS) = ZPOND1*ZYHAT_EXTENDED(JJ) +ZPOND2*ZYHAT_EXTENDED(JJ+1) diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90 index 00d53772e..724773931 100644 --- a/src/MNH/spawn_model2.f90 +++ b/src/MNH/spawn_model2.f90 @@ -2,7 +2,7 @@ !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. -! ######spl +!######################## MODULE MODI_SPAWN_MODEL2 !######################## ! @@ -184,6 +184,7 @@ END MODULE MODI_SPAWN_MODEL2 !! 24/04/2014 (J.escobar) bypass CRAY internal compiler error on IIJ computation !! Modification 06/2014 (C.Lac) Initialization of physical param of !! model2 before the call to ini_nsv +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -688,66 +689,66 @@ ALLOCATE(XLSWM(IIU,IJU,IKU)) ALLOCATE(XLSTHM(IIU,IJU,IKU)) IF ( NRR >= 1) ALLOCATE(XLSRVM(IIU,IJU,IKU)) ! LB fields for lbc coupling -ALLOCATE(XLBXUM(2*NRIMX+2,IJU,IKU)) +ALLOCATE(XLBXUM(2*NRIMX+2*JPHEXT,IJU,IKU)) ! IF ( .NOT. L2D ) THEN - ALLOCATE(XLBYUM(IIU,2*NRIMY+2,IKU)) + ALLOCATE(XLBYUM(IIU,2*NRIMY+2*JPHEXT,IKU)) ELSE ALLOCATE(XLBYUM(0,0,0)) END IF ! -ALLOCATE(XLBXVM(2*NRIMX+2,IJU,IKU)) +ALLOCATE(XLBXVM(2*NRIMX+2*JPHEXT,IJU,IKU)) ! IF ( .NOT. L2D ) THEN IF ( NRIMY == 0 ) THEN ALLOCATE(XLBYVM(IIU,4,IKU)) ELSE - ALLOCATE(XLBYVM(IIU,2*NRIMY+2,IKU)) + ALLOCATE(XLBYVM(IIU,2*NRIMY+2*JPHEXT,IKU)) END IF ELSE ALLOCATE(XLBYVM(0,0,0)) END IF ! -ALLOCATE(XLBXWM(2*NRIMX+2,IJU,IKU)) +ALLOCATE(XLBXWM(2*NRIMX+2*JPHEXT,IJU,IKU)) ! IF ( .NOT. L2D ) THEN - ALLOCATE(XLBYWM(IIU,2*NRIMY+2,IKU)) + ALLOCATE(XLBYWM(IIU,2*NRIMY+2*JPHEXT,IKU)) ELSE ALLOCATE(XLBYWM(0,0,0)) END IF ! -ALLOCATE(XLBXTHM(2*NRIMX+2,IJU,IKU)) +ALLOCATE(XLBXTHM(2*NRIMX+2*JPHEXT,IJU,IKU)) ! IF ( .NOT. L2D ) THEN - ALLOCATE(XLBYTHM(IIU,2*NRIMY+2,IKU)) + ALLOCATE(XLBYTHM(IIU,2*NRIMY+2*JPHEXT,IKU)) ELSE ALLOCATE(XLBYTHM(0,0,0)) END IF ! IF (CTURB /= 'NONE') THEN - ALLOCATE(XLBXTKEM(2*NRIMX+2,IJU,IKU)) + ALLOCATE(XLBXTKEM(2*NRIMX+2*JPHEXT,IJU,IKU)) ELSE ALLOCATE(XLBXTKEM(0,0,0)) END IF ! IF (CTURB /= 'NONE' .AND. (.NOT. L2D)) THEN - ALLOCATE(XLBYTKEM(IIU,2*NRIMY+2,IKU)) + ALLOCATE(XLBYTKEM(IIU,2*NRIMY+2*JPHEXT,IKU)) ELSE ALLOCATE(XLBYTKEM(0,0,0)) END IF ! -ALLOCATE(XLBXRM(2*NRIMX+2,IJU,IKU,NRR)) +ALLOCATE(XLBXRM(2*NRIMX+2*JPHEXT,IJU,IKU,NRR)) ! IF (.NOT. L2D ) THEN - ALLOCATE(XLBYRM(IIU,2*NRIMY+2,IKU,NRR)) + ALLOCATE(XLBYRM(IIU,2*NRIMY+2*JPHEXT,IKU,NRR)) ELSE ALLOCATE(XLBYRM(0,0,0,0)) END IF ! -ALLOCATE(XLBXSVM(2*NRIMX+2,IJU,IKU,NSV)) +ALLOCATE(XLBXSVM(2*NRIMX+2*JPHEXT,IJU,IKU,NSV)) ! IF (.NOT. L2D ) THEN - ALLOCATE(XLBYSVM(IIU,2*NRIMY+2,IKU,NSV)) + ALLOCATE(XLBYSVM(IIU,2*NRIMY+2*JPHEXT,IKU,NSV)) ELSE ALLOCATE(XLBYSVM(0,0,0,0)) END IF @@ -1070,52 +1071,52 @@ ZPRESSURE2=ZTIME2-ZTIME1 ! ! ! -XLBXUM(1:NRIMX+1,:,:) = XUT(IIB:IIB+NRIMX,:,:) -XLBXUM(NRIMX+2:2*NRIMX+2,:,:) = XUT(IIE+1-NRIMX:IIE+1,:,:) +XLBXUM(1:NRIMX+JPHEXT,:,:) = XUT(2:NRIMX+JPHEXT+1,:,:) +XLBXUM(NRIMX+JPHEXT+1:2*NRIMX+2*JPHEXT,:,:) = XUT(IIE+1-NRIMX:IIE+JPHEXT,:,:) IF( .NOT. L2D ) THEN - XLBYUM(:,1:NRIMY+1,:) = XUT(:,IJB-1:IJB-1+NRIMY,:) - XLBYUM(:,NRIMY+2:2*NRIMY+2,:) = XUT(:,IJE+1-NRIMY:IJE+1,:) + XLBYUM(:,1:NRIMY+JPHEXT,:) = XUT(:,1:NRIMY+JPHEXT,:) + XLBYUM(:,NRIMY+JPHEXT+1:2*NRIMY+2*JPHEXT,:) = XUT(:,IJE+1-NRIMY:IJE+JPHEXT,:) END IF ! !* 5.9.2 V variable ! ! -XLBXVM(1:NRIMX+1,:,:) = XVT(IIB-1:IIB-1+NRIMX,:,:) -XLBXVM(NRIMX+2:2*NRIMX+2,:,:) = XVT(IIE+1-NRIMX:IIE+1,:,:) +XLBXVM(1:NRIMX+JPHEXT,:,:) = XVT(1:NRIMX+JPHEXT,:,:) +XLBXVM(NRIMX+JPHEXT+1:2*NRIMX+2*JPHEXT,:,:) = XVT(IIE+1-NRIMX:IIE+JPHEXT,:,:) IF( .NOT. L2D ) THEN - XLBYVM(:,1:NRIMY+1,:) = XVT(:,IJB:IJB+NRIMY,:) - XLBYVM(:,NRIMY+2:2*NRIMY+2,:) = XVT(:,IJE+1-NRIMY:IJE+1,:) + XLBYVM(:,1:NRIMY+JPHEXT,:) = XVT(:,2:NRIMY+JPHEXT+1,:) + XLBYVM(:,NRIMY+JPHEXT+1:2*NRIMY+2*JPHEXT,:) = XVT(:,IJE+1-NRIMY:IJE+JPHEXT,:) END IF ! !* 5.9.3 W variable ! ! -XLBXWM(1:NRIMX+1,:,:) = XWT(IIB-1:IIB-1+NRIMX,:,:) -XLBXWM(NRIMX+2:2*NRIMX+2,:,:) = XWT(IIE+1-NRIMX:IIE+1,:,:) +XLBXWM(1:NRIMX+JPHEXT,:,:) = XWT(1:NRIMX+JPHEXT,:,:) +XLBXWM(NRIMX+JPHEXT+1:2*NRIMX+2*JPHEXT,:,:) = XWT(IIE+1-NRIMX:IIE+JPHEXT,:,:) IF( .NOT. L2D ) THEN - XLBYWM(:,1:NRIMY+1,:) = XWT(:,IJB-1:IJB-1+NRIMY,:) - XLBYWM(:,NRIMY+2:2*NRIMY+2,:) = XWT(:,IJE+1-NRIMY:IJE+1,:) + XLBYWM(:,1:NRIMY+JPHEXT,:) = XWT(:,1:NRIMY+JPHEXT,:) + XLBYWM(:,NRIMY+JPHEXT+1:2*NRIMY+2*JPHEXT,:) = XWT(:,IJE+1-NRIMY:IJE+JPHEXT,:) END IF ! !* 5.9.4 TH variable ! ! -XLBXTHM(1:NRIMX+1,:,:) = XTHT(IIB-1:IIB-1+NRIMX,:,:) -XLBXTHM(NRIMX+2:2*NRIMX+2,:,:) = XTHT(IIE+1-NRIMX:IIE+1,:,:) +XLBXTHM(1:NRIMX+JPHEXT,:,:) = XTHT(1:NRIMX+JPHEXT,:,:) +XLBXTHM(NRIMX+JPHEXT+1:2*NRIMX+2*JPHEXT,:,:) = XTHT(IIE+1-NRIMX:IIE+JPHEXT,:,:) IF( .NOT. L2D ) THEN - XLBYTHM(:,1:NRIMY+1,:) = XTHT(:,IJB-1:IJB-1+NRIMY,:) - XLBYTHM(:,NRIMY+2:2*NRIMY+2,:) = XTHT(:,IJE+1-NRIMY:IJE+1,:) + XLBYTHM(:,1:NRIMY+JPHEXT,:) = XTHT(:,1:NRIMY+JPHEXT,:) + XLBYTHM(:,NRIMY+JPHEXT+1:2*NRIMY+2*JPHEXT,:) = XTHT(:,IJE+1-NRIMY:IJE+JPHEXT,:) END IF ! !* 5.9.5 TKE variable ! ! IF (HTURB /= 'NONE') THEN - XLBXTKEM(1:NRIMX+1,:,:) = XTKET(IIB-1:IIB-1+NRIMX,:,:) - XLBXTKEM(NRIMX+2:2*NRIMX+2,:,:) = XTKET(IIE+1-NRIMX:IIE+1,:,:) + XLBXTKEM(1:NRIMX+JPHEXT,:,:) = XTKET(1:NRIMX+JPHEXT,:,:) + XLBXTKEM(NRIMX+JPHEXT+1:2*NRIMX+2*JPHEXT,:,:) = XTKET(IIE+1-NRIMX:IIE+JPHEXT,:,:) IF( .NOT. L2D ) THEN - XLBYTKEM(:,1:NRIMY+1,:) = XTKET(:,IJB-1:IJB-1+NRIMY,:) - XLBYTKEM(:,NRIMY+2:2*NRIMY+2,:) = XTKET(:,IJE+1-NRIMY:IJE+1,:) + XLBYTKEM(:,1:NRIMY+JPHEXT,:) = XTKET(:,1:NRIMY+JPHEXT,:) + XLBYTKEM(:,NRIMY+JPHEXT+1:2*NRIMY+2*JPHEXT,:) = XTKET(:,IJE+1-NRIMY:IJE+JPHEXT,:) END IF ENDIF ! @@ -1124,11 +1125,11 @@ ENDIF ! IF (NRR >= 1) THEN DO JRR =1,NRR - XLBXRM(1:NRIMX+1,:,:,JRR) = XRT(IIB-1:IIB-1+NRIMX,:,:,JRR) - XLBXRM(NRIMX+2:2*NRIMX+2,:,:,JRR) = XRT(IIE+1-NRIMX:IIE+1,:,:,JRR) + XLBXRM(1:NRIMX+JPHEXT,:,:,JRR) = XRT(1:NRIMX+JPHEXT,:,:,JRR) + XLBXRM(NRIMX+JPHEXT+1:2*NRIMX+2*JPHEXT,:,:,JRR) = XRT(IIE+1-NRIMX:IIE+JPHEXT,:,:,JRR) IF( .NOT. L2D ) THEN - XLBYRM(:,1:NRIMY+1,:,JRR) = XRT(:,IJB-1:IJB-1+NRIMY,:,JRR) - XLBYRM(:,NRIMY+2:2*NRIMY+2,:,JRR) = XRT(:,IJE+1-NRIMY:IJE+1,:,JRR) + XLBYRM(:,1:NRIMY+JPHEXT,:,JRR) = XRT(:,1:NRIMY+JPHEXT,:,JRR) + XLBYRM(:,NRIMY+JPHEXT+1:2*NRIMY+2*JPHEXT,:,JRR) = XRT(:,IJE+1-NRIMY:IJE+JPHEXT,:,JRR) END IF END DO END IF @@ -1137,11 +1138,11 @@ END IF ! IF (NSV /= 0) THEN DO JSV = 1, NSV - XLBXSVM(1:NRIMX+1,:,:,JSV) = XSVT(IIB-1:IIB-1+NRIMX,:,:,JSV) - XLBXSVM(NRIMX+2:2*NRIMX+2,:,:,JSV) = XSVT(IIE+1-NRIMX:IIE+1,:,:,JSV) + XLBXSVM(1:NRIMX+JPHEXT,:,:,JSV) = XSVT(1:NRIMX+JPHEXT,:,:,JSV) + XLBXSVM(NRIMX+JPHEXT+1:2*NRIMX+2*JPHEXT,:,:,JSV) = XSVT(IIE+1-NRIMX:IIE+JPHEXT,:,:,JSV) IF( .NOT. L2D ) THEN - XLBYSVM(:,1:NRIMY+1,:,JSV) = XSVT(:,IJB-1:IJB-1+NRIMY,:,JSV) - XLBYSVM(:,NRIMY+2:2*NRIMY+2,:,JSV) = XSVT(:,IJE+1-NRIMY:IJE+1,:,JSV) + XLBYSVM(:,1:NRIMY+JPHEXT,:,JSV) = XSVT(:,1:NRIMY+JPHEXT,:,JSV) + XLBYSVM(:,NRIMY+JPHEXT+1:2*NRIMY+2*JPHEXT,:,JSV) = XSVT(:,IJE+1-NRIMY:IJE+JPHEXT,:,JSV) END IF END DO ENDIF diff --git a/src/MNH/spawn_zs.f90 b/src/MNH/spawn_zs.f90 index 8a2725575..c249a3d95 100644 --- a/src/MNH/spawn_zs.f90 +++ b/src/MNH/spawn_zs.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 newsrc 2006/05/23 15:39:51 !----------------------------------------------------------------- !################### MODULE MODI_SPAWN_ZS @@ -99,6 +98,7 @@ END MODULE MODI_SPAWN_ZS !! !! Original 12/01/05 !! Modification 20/05/06 Remove Clark and Farley interpolation +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -114,6 +114,8 @@ USE MODI_ZS_BOUNDARY ! USE MODE_MODELN_HANDLER ! +USE MODE_MPPDB +! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -150,6 +152,9 @@ INTEGER :: JMAXITER = 2000 ! maximum number of iterations ! INTEGER, DIMENSION(2) :: IZSMAX INTEGER :: IMI ! current model index +! +INTEGER :: IXSIZE,IYSIZE +INTEGER :: INFO_ll ! error return code !------------------------------------------------------------------------------- ! !* 1. PROLOGUE: @@ -157,6 +162,7 @@ INTEGER :: IMI ! current model index ! IMI = GET_CURRENT_MODEL_INDEX() CALL GOTO_MODEL(2) +CALL GO_TOMODEL_ll(2,INFO_ll) ! ! !* 1.2 recovers logical unit number of output listing @@ -177,6 +183,7 @@ ALLOCATE(ZZS2_LS(SIZE(PZS2,1),SIZE(PZS2,2))) XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO,1, & HLBCX,HLBCY,PZS1,ZZS2_LS) + CALL MPPDB_CHECK2D(ZZS2_LS,"SPAWN_ZS::ZZS2_LS",PRECISION) ! !* 4.2 New zs: ! ------- @@ -190,8 +197,10 @@ IF (KDXRATIO/=1 .OR. KDYRATIO/=1) THEN ! !* allocations ! - ALLOCATE(ZZS2(KXEND-KXOR-1,KYEND-KYOR-1)) - ALLOCATE(ZDZS(KXEND-KXOR-1,KYEND-KYOR-1)) + IXSIZE = KXEND-KXOR - 2*JPHEXT + 1 + IYSIZE = KYEND-KYOR - 2*JPHEXT + 1 + ALLOCATE(ZZS2(IXSIZE,IYSIZE)) + ALLOCATE(ZDZS(IXSIZE,IYSIZE)) ALLOCATE(ZZS1(SIZE(PZS1,1),SIZE(PZS1,2))) ! !* constants @@ -214,12 +223,13 @@ IF (KDXRATIO/=1 .OR. KDYRATIO/=1) THEN XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO,1, & HLBCX,HLBCY,ZZS1,PZS2) + CALL MPPDB_CHECK2D(PZS2,"SPAWN_ZS::PZS2",PRECISION) JCOUNTER=JCOUNTER+1 ! !* if orography is positive, it stays positive ! - DO JI=1,KXEND-KXOR-1 - DO JJ=1,KYEND-KYOR-1 + DO JI=1,IXSIZE + DO JJ=1,IYSIZE IF (PZS1(JI+KXOR,JJ+KYOR)>-1.E-15) & PZS2((JI-1)*KDXRATIO+1+JPHEXT:JI*KDXRATIO+JPHEXT, & (JJ-1)*KDYRATIO+1+JPHEXT:JJ*KDYRATIO+JPHEXT) = & @@ -227,12 +237,13 @@ IF (KDXRATIO/=1 .OR. KDYRATIO/=1) THEN (JJ-1)*KDYRATIO+1+JPHEXT:JJ*KDYRATIO+JPHEXT), 0.) END DO END DO + CALL MPPDB_CHECK2D(PZS2,"SPAWN_ZS::PZS2",PRECISION) ! !* computation of new averaged orography ! ZZS2(:,:) = 0. - DO JI=1,KXEND-KXOR-1 - DO JJ=1,KYEND-KYOR-1 + DO JI=1,IXSIZE + DO JJ=1,IYSIZE DO JEPSX = (JI-1)*KDXRATIO+1+JPHEXT, JI*KDXRATIO+JPHEXT DO JEPSY = (JJ-1)*KDYRATIO+1+JPHEXT, JJ*KDYRATIO+JPHEXT ZZS2(JI,JJ) = ZZS2(JI,JJ) + PZS2(JEPSX,JEPSY) @@ -242,7 +253,7 @@ IF (KDXRATIO/=1 .OR. KDYRATIO/=1) THEN END DO ZZS2(:,:) = ZZS2(:,:) / (KDXRATIO*KDYRATIO) ! - ZDZS(:,:)=PZS1(KXOR+1:KXEND-1,KYOR+1:KYEND-1)-ZZS2(:,:) + ZDZS(:,:)=PZS1(KXOR+JPHEXT:KXEND-JPHEXT,KYOR+JPHEXT:KYEND-JPHEXT)-ZZS2(:,:) ! !* test to end the iterative process ! @@ -253,8 +264,8 @@ IF (KDXRATIO/=1 .OR. KDYRATIO/=1) THEN ' NOT obtained after',JCOUNTER,' iterations' WRITE(ILUOUT,FMT=*) TRIM(HFIELD), & ' is modified to insure egality of large scale and averaged fine field' - DO JI=1,KXEND-KXOR-1 - DO JJ=1,KYEND-KYOR-1 + DO JI=1,IXSIZE + DO JJ=1,IYSIZE DO JEPSX = (JI-1)*KDXRATIO+1+JPHEXT, JI*KDXRATIO+JPHEXT DO JEPSY = (JJ-1)*KDYRATIO+1+JPHEXT, JJ*KDYRATIO+JPHEXT PZS2(JEPSX,JEPSY) = PZS2(JEPSX,JEPSY) + ZDZS(JI,JJ) @@ -283,25 +294,25 @@ IF (KDXRATIO/=1 .OR. KDYRATIO/=1) THEN ! !* correction of coarse orography ! - ZZS1(KXOR+1:KXEND-1,KYOR+1:KYEND-1) = & - ZZS1(KXOR+1:KXEND-1,KYOR+1:KYEND-1) + ZRELAX * ZDZS(:,:) + ZZS1(KXOR+JPHEXT:KXEND-JPHEXT,KYOR+JPHEXT:KYEND-JPHEXT) = & + ZZS1(KXOR+JPHEXT:KXEND-JPHEXT,KYOR+JPHEXT:KYEND-JPHEXT) + ZRELAX * ZDZS(:,:) ! ! extrapolations (X direction) ! IF(KXOR==1 .AND. KXEND==SIZE(PZS1,1) .AND. HLBCX(1)=='CYCL' ) THEN - ZZS1(KXOR,KYOR+1:KYEND-1) = ZZS1(KXEND-1,KYOR+1:KYEND-1) - ZZS1(KXEND,KYOR+1:KYEND-1) = ZZS1(KXOR+1,KYOR+1:KYEND-1) + ZZS1(KXOR,KYOR+JPHEXT:KYEND-JPHEXT) = ZZS1(KXEND-JPHEXT,KYOR+JPHEXT:KYEND-JPHEXT) + ZZS1(KXEND,KYOR+JPHEXT:KYEND-JPHEXT) = ZZS1(KXOR+JPHEXT,KYOR+JPHEXT:KYEND-JPHEXT) ELSE - ZZS1(KXOR,KYOR+1:KYEND-1) = & - 2. * ZZS1(KXOR+1,KYOR+1:KYEND-1) - ZZS1(KXOR+2,KYOR+1:KYEND-1) + ZZS1(KXOR+JPHEXT-1,KYOR+JPHEXT:KYEND-JPHEXT) = & + 2. * ZZS1(KXOR+JPHEXT,KYOR+JPHEXT:KYEND-JPHEXT) - ZZS1(KXOR+JPHEXT+1,KYOR+JPHEXT:KYEND-JPHEXT) IF(KXOR>1) & - ZZS1(KXOR-1,KYOR+1:KYEND-1) = & - 2. * ZZS1(KXOR ,KYOR+1:KYEND-1) - ZZS1(KXOR+1,KYOR+1:KYEND-1) - ZZS1(KXEND,KYOR+1:KYEND-1) = & - 2. * ZZS1(KXEND-1,KYOR+1:KYEND-1) - ZZS1(KXEND-2,KYOR+1:KYEND-1) + ZZS1(KXOR+JPHEXT-2,KYOR+JPHEXT:KYEND-JPHEXT) = & + 2. * ZZS1(KXOR+JPHEXT-1,KYOR+JPHEXT:KYEND-JPHEXT) - ZZS1(KXOR+JPHEXT,KYOR+JPHEXT:KYEND-JPHEXT) + ZZS1(KXEND-JPHEXT+1,KYOR+JPHEXT:KYEND-JPHEXT) = & + 2. * ZZS1(KXEND-JPHEXT,KYOR+JPHEXT:KYEND-JPHEXT) - ZZS1(KXEND-JPHEXT-1,KYOR+JPHEXT:KYEND-JPHEXT) IF(KXEND<SIZE(PZS1,1)) & - ZZS1(KXEND+1,KYOR+1:KYEND-1) = & - 2. * ZZS1(KXEND ,KYOR+1:KYEND-1) - ZZS1(KXEND-1,KYOR+1:KYEND-1) + ZZS1(KXEND-JPHEXT+2,KYOR+JPHEXT:KYEND-JPHEXT) = & + 2. * ZZS1(KXEND-JPHEXT+1,KYOR+JPHEXT:KYEND-JPHEXT) - ZZS1(KXEND-JPHEXT,KYOR+JPHEXT:KYEND-JPHEXT) END IF ! ! extrapolations (Y direction) @@ -309,19 +320,19 @@ IF (KDXRATIO/=1 .OR. KDYRATIO/=1) THEN IXMIN=MAX(KXOR-1,1) IXMAX=MIN(KXEND+1,SIZE(PZS1,1)) IF(KYOR==1 .AND. KYEND==SIZE(PZS1,2) .AND. HLBCY(1)=='CYCL' ) THEN - ZZS1(IXMIN:IXMAX,KYOR) = ZZS1(IXMIN:IXMAX,KYEND-1) - ZZS1(IXMIN:IXMAX,KYEND) = ZZS1(IXMIN:IXMAX,KYOR+1) + ZZS1(IXMIN:IXMAX,KYOR) = ZZS1(IXMIN:IXMAX,KYEND-JPHEXT) + ZZS1(IXMIN:IXMAX,KYEND) = ZZS1(IXMIN:IXMAX,KYOR+JPHEXT) ELSE - ZZS1(IXMIN:IXMAX,KYOR) = & - 2. * ZZS1(IXMIN:IXMAX,KYOR+1) - ZZS1(IXMIN:IXMAX,KYOR+2) + ZZS1(IXMIN:IXMAX,KYOR+JPHEXT-1) = & + 2. * ZZS1(IXMIN:IXMAX,KYOR+JPHEXT) - ZZS1(IXMIN:IXMAX,KYOR+JPHEXT+1) IF(KYOR>1) & - ZZS1(IXMIN:IXMAX,KYOR-1) = & - 2. * ZZS1(IXMIN:IXMAX,KYOR) - ZZS1(IXMIN:IXMAX,KYOR+1) - ZZS1(IXMIN:IXMAX,KYEND) = & - 2. * ZZS1(IXMIN:IXMAX,KYEND-1) - ZZS1(IXMIN:IXMAX,KYEND-2) + ZZS1(IXMIN:IXMAX,KYOR+JPHEXT-2) = & + 2. * ZZS1(IXMIN:IXMAX,KYOR+JPHEXT-1) - ZZS1(IXMIN:IXMAX,KYOR+JPHEXT) + ZZS1(IXMIN:IXMAX,KYEND-JPHEXT+1) = & + 2. * ZZS1(IXMIN:IXMAX,KYEND-JPHEXT) - ZZS1(IXMIN:IXMAX,KYEND-JPHEXT-1) IF(KYEND<SIZE(PZS1,2)) & - ZZS1(IXMIN:IXMAX,KYEND+1) = & - 2. * ZZS1(IXMIN:IXMAX,KYEND) - ZZS1(IXMIN:IXMAX,KYEND-1) + ZZS1(IXMIN:IXMAX,KYEND-JPHEXT+2) = & + 2. * ZZS1(IXMIN:IXMAX,KYEND-JPHEXT+1) - ZZS1(IXMIN:IXMAX,KYEND-JPHEXT) END IF ! !* next iteration @@ -342,6 +353,7 @@ IF (PRESENT(PZS2_LS)) PZS2_LS(:,:)=ZZS2_LS(:,:) DEALLOCATE(ZZS2_LS) ! CALL GOTO_MODEL(IMI) +CALL GO_TOMODEL_ll(IMI,INFO_ll) !------------------------------------------------------------------------------- END SUBROUTINE SPAWN_ZS ! diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90 index 101112c23..13d8f5739 100644 --- a/src/MNH/spawning.f90 +++ b/src/MNH/spawning.f90 @@ -70,6 +70,7 @@ !! to keep finest fields of son1 !! Modification 05/06 Remove EPS !! Modification 19/03/2008 (J.Escobar) rename INIT to INIT_MNH --> grib problem +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -118,6 +119,10 @@ USE MODI_VERSION USE MODI_INIT_MNH USE MODI_DEALLOC_SURFEX ! +USE MODN_CONF, ONLY : JPHEXT , NHALO +! +USE MODE_MPPDB +! IMPLICIT NONE ! !* 0.3 Local variables @@ -136,9 +141,11 @@ LOGICAL :: LSPAWN_SURF = .TRUE. ! .TRUE. : surface fields are spawned LOGICAL :: LRES REAL :: XRES NAMELIST/NAM_SPAWN_SURF/LSPAWN_SURF, LRES, XRES +NAMELIST/NAM_CONF_SPAWN/JPHEXT, NHALO ! !------------------------------------------------------------------------------- ! +CALL MPPDB_INIT() ! First Switch to model 1 variables CALL GOTO_MODEL(1) ! @@ -181,6 +188,8 @@ IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF) CALL UPDATE_MODD_FROM_NMLVAR CALL POSNAM(ILUSPA,'NAM_BLANK',GFOUND) IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_BLANK) +CALL POSNAM(ILUSPA,'NAM_CONF_SPAWN',GFOUND) +IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONF_SPAWN) !!CALL CLOSE_ll(YEXSPA) ! !------------------------------------------------------------------------------- diff --git a/src/MNH/tke_eps_sources.f90 b/src/MNH/tke_eps_sources.f90 index 02c6f2335..9f0be0bd9 100644 --- a/src/MNH/tke_eps_sources.f90 +++ b/src/MNH/tke_eps_sources.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 turb 2006/06/06 10:02:03 !----------------------------------------------------------------- ! ########################### MODULE MODI_TKE_EPS_SOURCES @@ -169,6 +168,8 @@ END MODULE MODI_TKE_EPS_SOURCES !! change of YCOMMENT !! 2012-02 Y. Seity, add possibility to run with reversed !! vertical levels +!! 2015-01 (J. Escobar) missing get_halo(ZRES) for JPHEXT<> 1 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -196,6 +197,8 @@ USE MODI_LES_MEAN_SUBGRID USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll ! +USE MODI_GET_HALO +! IMPLICIT NONE ! ! @@ -272,12 +275,9 @@ NULLIFY(TZFIELDDISS_ll) ! ------------------------ ! ! -IIB=1+JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IIU=SIZE(PTKEM,1) -IIE=IIU-JPHEXT -IJB=1+JPHEXT IJU=SIZE(PTKEM,2) -IJE=IJU-JPHEXT IKB=KKA+JPVEXT_TURB*KKL IKE=KKU-JPVEXT_TURB*KKL ! @@ -329,6 +329,8 @@ ZA(:,:,:) = - PTSTEP * XCET * & ! CALL TRIDIAG_TKE(KKA,KKU,KKL,PTKEM,ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,& & ZSOURCE,PTSTEP*ZFLX,ZRES) +!JUAN +CALL GET_HALO(ZRES) ! !* diagnose the dissipation ! diff --git a/src/MNH/tridz.f90 b/src/MNH/tridz.f90 index 65889623c..192770486 100644 --- a/src/MNH/tridz.f90 +++ b/src/MNH/tridz.f90 @@ -173,6 +173,7 @@ END MODULE MODI_TRIDZ !! PBFY transposition !! 14/03/02 (P. Jabouille) set values for meaningless spectral coefficients !! (to avoid problem in bouissinesq configuration) +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -191,6 +192,7 @@ USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll,GET_ORZ_ll,LWESTZ_ll,LSOUTHZ_ll !JUAN USE MODE_REPRO_SUM !JUAN +USE MODE_MPPDB ! IMPLICIT NONE ! @@ -337,8 +339,9 @@ IJE_ll = IJMAX_ll + JPHEXT ! ! the use of local array ZEIGENX and ZEIGEN would require some technical modifications ! -ALLOCATE (ZEIGENX_ll(IIMAX_ll + 2*JPHEXT)) -ALLOCATE (ZEIGEN_ll(IIMAX_ll + 2*JPHEXT, IJMAX_ll + 2*JPHEXT)) +ALLOCATE (ZEIGENX_ll(IIMAX_ll+2*JPHEXT)) +ALLOCATE (ZEIGEN_ll(IIMAX_ll+2*JPHEXT,IJMAX_ll+2*JPHEXT)) + ZEIGEN_ll = 0.0 ! Get the origin coordinates of the extended sub-domain in global landmarks CALL GET_OR_ll('Y',IORXY_ll,IORYY_ll) @@ -491,7 +494,7 @@ SELECT CASE (HLBCX(1)) ! in the cyclic case, the eigenvalues are the same for two following JM values: ! it corresponds to the real and complex parts of the FFT CASE('CYCL') ! cyclic case - IXMODE_ll = IIMAX_ll+2 + IXMODE_ll = IIMAX_ll+2*JPHEXT ! +2 IXMODEY_ll = IIUY_ll IXMODEB_ll = IIUB_ll !JUAN Z_SPLITTING ! @@ -503,13 +506,13 @@ SELECT CASE (HLBCX(1)) ! ! IF (LEAST_ll(HSPLITTING='Y')) THEN - IXMODEY_ll = IIUY_ll - 2 + IXMODEY_ll = IIUY_ll - 2*JPHEXT ! -2 ELSE IXMODEY_ll = IIUY_ll END IF !JUAN Z_SPLITTING IF (LEAST_ll(HSPLITTING='B')) THEN - IXMODEB_ll = IIUB_ll - 2 + IXMODEB_ll = IIUB_ll - 2*JPHEXT ! -2 ELSE IXMODEB_ll = IIUB_ll END IF @@ -532,7 +535,7 @@ IF (.NOT. L2D) THEN ! it corresponds to the real and complex parts of the FFT result ! CASE('CYCL') ! 3D cyclic case - IYMODE_ll = IJMAX_ll+2 + IYMODE_ll = IJMAX_ll+2*JPHEXT ! +2 IYMODEY_ll = IJUY_ll IYMODEB_ll = IJUB_ll !JUAN Z_SPLITTING ! @@ -545,8 +548,8 @@ IF (.NOT. L2D) THEN ! CASE DEFAULT ! 3D non-cyclic cases IYMODE_ll = IJMAX_ll - IYMODEY_ll = IJUY_ll - 2 - IYMODEB_ll = IJUB_ll - 2 !JUAN Z_SPLITTING + IYMODEY_ll = IJUY_ll - 2*JPHEXT ! -2 + IYMODEB_ll = IJUB_ll - 2*JPHEXT ! -2 JUAN Z_SPLITTING ! DO JJ = 1,IYMODE_ll DO JI = 1,IXMODE_ll @@ -568,6 +571,9 @@ END IF ! DEALLOCATE(ZEIGENX_ll) ! +!CALL MPPDB_CHECK2D(ZEIGEN_ll,"TRIDZ::ZEIGEN_ll",PRECISION) +! +! !* 7.2 compute the matrix diagonal elements ! ! diff --git a/src/MNH/turb_hor_dyn_corr.f90 b/src/MNH/turb_hor_dyn_corr.f90 index 1fbb673f5..216f2f5d5 100644 --- a/src/MNH/turb_hor_dyn_corr.f90 +++ b/src/MNH/turb_hor_dyn_corr.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 turb 2006/05/18 13:07:25 !----------------------------------------------------------------- MODULE MODI_TURB_HOR_DYN_CORR ! @@ -140,6 +139,7 @@ END MODULE MODI_TURB_HOR_DYN_CORR !! July 2012 (V.Masson) Implicitness of W !! March 2014 (V.Masson) tridiag_w : bug between !! mass and flux position +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -167,6 +167,7 @@ USE MODI_LES_MEAN_SUBGRID USE MODI_TRIDIAG_W ! USE MODI_SECOND_MNH +USE MODE_MPPDB ! IMPLICIT NONE ! @@ -393,9 +394,14 @@ END IF ! ! Complete the U tendency IF (.NOT. LFLAT) THEN +CALL MPPDB_CHECK3DM("before turb_corr:PRUS,PRHODJ,ZFLX,PDXX,PDZX,PINV_PDZZ",PRECISION,& + & PRUS,PRHODJ,ZFLX,PDXX,PDZX,PINV_PDZZ ) + PRUS(:,:,:)=PRUS & -DXM(PRHODJ * ZFLX / MXF(PDXX) ) & +DZF(1,IKU,1, PDZX / MZM(1,IKU,1,PDXX) * MXM( MZM(1,IKU,1,PRHODJ*ZFLX) * PINV_PDZZ ) ) +CALL MPPDB_CHECK3DM("after turb_corr:PRUS,PRHODJ,ZFLX,PDXX,PDZX,PINV_PDZZ",PRECISION,& + & PRUS,PRHODJ,ZFLX,PDXX,PDZX,PINV_PDZZ ) ELSE PRUS(:,:,:)=PRUS -DXM(PRHODJ * ZFLX / MXF(PDXX) ) END IF diff --git a/src/MNH/turb_hor_splt.f90 b/src/MNH/turb_hor_splt.f90 index e4b71e5e9..43daa0ffd 100644 --- a/src/MNH/turb_hor_splt.f90 +++ b/src/MNH/turb_hor_splt.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 turb 2006/06/06 09:58:33 !----------------------------------------------------------------- ! ######################### MODULE MODI_TURB_HOR_SPLT @@ -253,6 +252,7 @@ END MODULE MODI_TURB_HOR_SPLT !! Feb 20, 2003 (JP Pinty) Add PFRAC_ICE !! Oct.2009 (C.Lac) Introduction of different PTSTEP according to the !! advection schemes +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -382,10 +382,7 @@ TYPE(LIST_ll), POINTER, SAVE :: TZFIELDS_ll IKB = 1.+JPVEXT IKE = SIZE(PUM,3) - JPVEXT IKU = SIZE(PUM,3) -IIB = 1.+JPHEXT -IJB = 1.+JPHEXT -IIE = SIZE(PUM,1) - JPHEXT -IJE = SIZE(PUM,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ISV=SIZE(PSVM,4) ! ALLOCATE(ZK(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))) diff --git a/src/MNH/turb_ver_dyn_flux.f90 b/src/MNH/turb_ver_dyn_flux.f90 index 4c42febce..3224c540b 100644 --- a/src/MNH/turb_ver_dyn_flux.f90 +++ b/src/MNH/turb_ver_dyn_flux.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 turb 2006/06/23 15:58:57 !----------------------------------------------------------------- ! #################### MODULE MODI_TURB_VER_DYN_FLUX @@ -286,6 +285,7 @@ END MODULE MODI_TURB_VER_DYN_FLUX !! October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after !! change of YCOMMENT !! 2012-02 Y. Seity, add possibility to run with reversed vertical levels +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !!-------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -310,6 +310,7 @@ USE MODE_FMWRIT USE MODI_LES_MEAN_SUBGRID ! USE MODI_SECOND_MNH +USE MODE_ll ! IMPLICIT NONE ! @@ -418,11 +419,8 @@ REAL :: ZTIME1, ZTIME2 ! ------------- ! IIU=SIZE(PUM,1) -IIE=IIU-JPHEXT -IIB=1+JPHEXT IJU=SIZE(PUM,2) -IJE=IJU-JPHEXT -IJB=1+JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=KKA+JPVEXT_TURB*KKL IKE=KKU-JPVEXT_TURB*KKL IKT=SIZE(PUM,3) diff --git a/src/MNH/two_wayn.f90 b/src/MNH/two_wayn.f90 index 4be8177b6..a213fdbcf 100644 --- a/src/MNH/two_wayn.f90 +++ b/src/MNH/two_wayn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_8 nesting 2008/06/30 12:08:25 !----------------------------------------------------------------- ! ################### MODULE MODI_TWO_WAY_n @@ -117,6 +116,7 @@ END MODULE MODI_TWO_WAY_n !! V.Masson, C.Lac 08/10 Corrections in relaxation !! J. Escobar 27/06/2011 correction for gridnesting with different SHAPE !! Bosseur & Filippi 07/2013 Adds Forefire +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -210,6 +210,8 @@ INTEGER :: IHALO ! band size where relaxation is not performed LOGICAL :: LINTER ! flag for intersection or not with the child domain INTEGER :: IMI ! Current model index KMI==NDAD(IMI) ! +INTEGER :: IIBC,IJBC,IIEC,IJEC +! !------------------------------------------------------------------------------- ! !* 1. PROLOGUE: @@ -306,6 +308,11 @@ ZK2W = 1. / (PTSTEP * NDT_2_WAY(NDAD(IMI))) !* 2. AVERAGE OF SCALAR VARIABLES ! --------------------------- ! +IIBC=JPHEXT+2 +IIEC=IDIMX-JPHEXT-1 +IJBC=JPHEXT+2 +IJEC=IDIMY-JPHEXT-1 +! !* 2.1 summation of rhodj ! ZTRHODJ(:,:,:) = 0. @@ -315,7 +322,7 @@ DO JX=1,IDXRATIO II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTRHODJ(3:IDIMX-2,3:IDIMY-2,:) = ZTRHODJ(3:IDIMX-2,3:IDIMY-2,:) & + ZTRHODJ(IIBC:IIEC,IJBC:IJEC,:) = ZTRHODJ(IIBC:IIEC,IJBC:IJEC,:) & +XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:) END DO END DO @@ -329,7 +336,7 @@ DO JX=1,IDXRATIO II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTTHM(3:IDIMX-2,3:IDIMY-2,:) = ZTTHM(3:IDIMX-2,3:IDIMY-2,:) & + ZTTHM(IIBC:IIEC,IJBC:IJEC,:) = ZTTHM(IIBC:IIEC,IJBC:IJEC,:) & +XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:) & *XTHT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:) ! @@ -347,7 +354,7 @@ DO JVAR=1,IRR II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTRM(3:IDIMX-2,3:IDIMY-2,:,JVAR) = ZTRM(3:IDIMX-2,3:IDIMY-2,:,JVAR) & + ZTRM(IIBC:IIEC,IJBC:IJEC,:,JVAR) = ZTRM(IIBC:IIEC,IJBC:IJEC,:,JVAR) & +XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:) & *XRT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR) END DO @@ -366,7 +373,7 @@ IF (KSV /= 0) THEN II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR) = ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR) & + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR) = ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR) & +XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:) & *XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR) END DO @@ -383,8 +390,8 @@ IF (NSV_C2R2_A(IMI) > 0) THEN II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_C2R2BEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_C2R2BEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_C2R2BEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_C2R2BEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_C2R2BEG_A(IMI)) END DO @@ -402,8 +409,8 @@ IF (NSV_C1R3_A(IMI) > 0) THEN II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_C1R3BEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_C1R3BEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_C1R3BEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_C1R3BEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_C1R3BEG_A(IMI)) END DO @@ -421,8 +428,8 @@ IF (NSV_ELEC_A(IMI) > 0) THEN II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_ELECBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_ELECBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_ELECBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_ELECBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_ELECBEG_A(IMI)) END DO @@ -438,8 +445,8 @@ DO JVAR=1,NSV_CHEM_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_CHEMBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_CHEMBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_CHEMBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_CHEMBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_CHEMBEG_A(IMI)) END DO @@ -456,8 +463,8 @@ IF (NSV_CHIC_A(IMI) > 0) THEN II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_CHICBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_CHICBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_CHICBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_CHICBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_CHICBEG_A(IMI)) END DO @@ -473,8 +480,8 @@ DO JVAR=1,NSV_LNOX_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_LNOXBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_LNOXBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_LNOXBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_LNOXBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_LNOXBEG_A(IMI)) END DO @@ -489,8 +496,8 @@ DO JVAR=1,NSV_AER_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_AERBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_AERBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_AERBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_AERBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_AERBEG_A(IMI)) END DO @@ -504,8 +511,8 @@ DO JVAR=1,NSV_AERDEP_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_AERDEPBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_AERDEPBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_AERDEPBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_AERDEPBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_AERDEPBEG_A(IMI)) END DO @@ -520,8 +527,8 @@ DO JVAR=1,NSV_DST_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_DSTBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_DSTBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_DSTBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_DSTBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_DSTBEG_A(IMI)) END DO @@ -535,8 +542,8 @@ DO JVAR=1,NSV_DSTDEP_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_DSTDEPBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_DSTDEPBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_DSTDEPBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_DSTDEPBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_DSTDEPBEG_A(IMI)) END DO @@ -551,8 +558,8 @@ DO JVAR=1,NSV_SLT_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_SLTBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_SLTBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_SLTBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_SLTBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_SLTBEG_A(IMI)) END DO @@ -566,8 +573,8 @@ DO JVAR=1,NSV_SLTDEP_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_SLTDEPBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_SLTDEPBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_SLTDEPBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_SLTDEPBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_SLTDEPBEG_A(IMI)) END DO @@ -582,8 +589,8 @@ DO JVAR=1,NSV_LG_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_LGBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_LGBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_LGBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_LGBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_LGBEG_A(IMI)) END DO @@ -600,8 +607,8 @@ DO JVAR=1,NSV_PP_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_PPBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_PPBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_PPBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_PPBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_PPBEG_A(IMI)) END DO @@ -619,8 +626,8 @@ DO JVAR=1,NSV_FF_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_FFBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_FFBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_FFBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_FFBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_FFBEG_A(IMI)) END DO @@ -638,8 +645,8 @@ DO JVAR=1,NSV_CS_A(KMI) II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_CSBEG_A(KMI)) = & - &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_CSBEG_A(KMI))+& + ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_CSBEG_A(KMI)) = & + &ZTSVM(IIBC:IIEC,IJBC:IJEC,:,JVAR-1+NSV_CSBEG_A(KMI))+& &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*& &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_CSBEG_A(IMI)) END DO @@ -655,11 +662,11 @@ END IF II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTINPRR(3:IDIMX-2,3:IDIMY-2) = ZTINPRR(3:IDIMX-2,3:IDIMY-2) & + ZTINPRR(IIBC:IIEC,IJBC:IJEC) = ZTINPRR(IIBC:IIEC,IJBC:IJEC) & +XINPRR(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO) END DO END DO - ZTINPRR(3:IDIMX-2,3:IDIMY-2)=ZTINPRR(3:IDIMX-2,3:IDIMY-2)/(IDXRATIO*IDYRATIO) + ZTINPRR(IIBC:IIEC,IJBC:IJEC)=ZTINPRR(IIBC:IIEC,IJBC:IJEC)/(IDXRATIO*IDYRATIO) END IF ! IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & @@ -671,11 +678,11 @@ END IF II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTINPRC(3:IDIMX-2,3:IDIMY-2) = ZTINPRC(3:IDIMX-2,3:IDIMY-2) & + ZTINPRC(IIBC:IIEC,IJBC:IJEC) = ZTINPRC(IIBC:IIEC,IJBC:IJEC) & +XINPRC(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO) END DO END DO - ZTINPRC(3:IDIMX-2,3:IDIMY-2)=ZTINPRC(3:IDIMX-2,3:IDIMY-2)/(IDXRATIO*IDYRATIO) + ZTINPRC(IIBC:IIEC,IJBC:IJEC)=ZTINPRC(IIBC:IIEC,IJBC:IJEC)/(IDXRATIO*IDYRATIO) END IF ! IF (LUSERS) THEN @@ -686,11 +693,11 @@ END IF II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTINPRS(3:IDIMX-2,3:IDIMY-2) = ZTINPRS(3:IDIMX-2,3:IDIMY-2) & + ZTINPRS(IIBC:IIEC,IJBC:IJEC) = ZTINPRS(IIBC:IIEC,IJBC:IJEC) & +XINPRS(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO) END DO END DO - ZTINPRS(3:IDIMX-2,3:IDIMY-2) = ZTINPRS(3:IDIMX-2,3:IDIMY-2)/(IDXRATIO*IDYRATIO) + ZTINPRS(IIBC:IIEC,IJBC:IJEC) = ZTINPRS(IIBC:IIEC,IJBC:IJEC)/(IDXRATIO*IDYRATIO) END IF ! IF (LUSERG) THEN @@ -701,11 +708,11 @@ END IF II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTINPRG(3:IDIMX-2,3:IDIMY-2) = ZTINPRG(3:IDIMX-2,3:IDIMY-2) & + ZTINPRG(IIBC:IIEC,IJBC:IJEC) = ZTINPRG(IIBC:IIEC,IJBC:IJEC) & +XINPRG(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO) END DO END DO - ZTINPRG(3:IDIMX-2,3:IDIMY-2) =ZTINPRG(3:IDIMX-2,3:IDIMY-2)/(IDXRATIO*IDYRATIO) + ZTINPRG(IIBC:IIEC,IJBC:IJEC) =ZTINPRG(IIBC:IIEC,IJBC:IJEC)/(IDXRATIO*IDYRATIO) END IF ! IF (LUSERH) THEN @@ -716,11 +723,11 @@ END IF II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTINPRH(3:IDIMX-2,3:IDIMY-2) = ZTINPRH(3:IDIMX-2,3:IDIMY-2) & + ZTINPRH(IIBC:IIEC,IJBC:IJEC) = ZTINPRH(IIBC:IIEC,IJBC:IJEC) & +XINPRH(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO) END DO END DO - ZTINPRH(3:IDIMX-2,3:IDIMY-2) =ZTINPRH(3:IDIMX-2,3:IDIMY-2)/(IDXRATIO*IDYRATIO) + ZTINPRH(IIBC:IIEC,IJBC:IJEC) =ZTINPRH(IIBC:IIEC,IJBC:IJEC)/(IDXRATIO*IDYRATIO) END IF ! IF (CDCONV /= 'NONE') THEN @@ -732,14 +739,14 @@ END IF II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTPRCONV(3:IDIMX-2,3:IDIMY-2) = ZTPRCONV(3:IDIMX-2,3:IDIMY-2) & + ZTPRCONV(IIBC:IIEC,IJBC:IJEC) = ZTPRCONV(IIBC:IIEC,IJBC:IJEC) & +XPRCONV(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO) - ZTPRSCONV(3:IDIMX-2,3:IDIMY-2) = ZTPRSCONV(3:IDIMX-2,3:IDIMY-2) & + ZTPRSCONV(IIBC:IIEC,IJBC:IJEC) = ZTPRSCONV(IIBC:IIEC,IJBC:IJEC) & +XPRSCONV(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO) END DO END DO - ZTPRCONV(3:IDIMX-2,3:IDIMY-2) = ZTPRCONV(3:IDIMX-2,3:IDIMY-2)/(IDXRATIO*IDYRATIO) - ZTPRSCONV(3:IDIMX-2,3:IDIMY-2) = ZTPRSCONV(3:IDIMX-2,3:IDIMY-2)/(IDXRATIO*IDYRATIO) + ZTPRCONV(IIBC:IIEC,IJBC:IJEC) = ZTPRCONV(IIBC:IIEC,IJBC:IJEC)/(IDXRATIO*IDYRATIO) + ZTPRSCONV(IIBC:IIEC,IJBC:IJEC) = ZTPRSCONV(IIBC:IIEC,IJBC:IJEC)/(IDXRATIO*IDYRATIO) END IF ! Short Wave and Long Wave variables IF (CRAD /= 'NONE') THEN @@ -752,17 +759,17 @@ END IF II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTDIRFLASWD(3:IDIMX-2,3:IDIMY-2,:) = ZTDIRFLASWD(3:IDIMX-2,3:IDIMY-2,:)& + ZTDIRFLASWD(IIBC:IIEC,IJBC:IJEC,:) = ZTDIRFLASWD(IIBC:IIEC,IJBC:IJEC,:)& +XDIRFLASWD(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:) - ZTSCAFLASWD(3:IDIMX-2,3:IDIMY-2,:) = ZTSCAFLASWD(3:IDIMX-2,3:IDIMY-2,:)& + ZTSCAFLASWD(IIBC:IIEC,IJBC:IJEC,:) = ZTSCAFLASWD(IIBC:IIEC,IJBC:IJEC,:)& +XSCAFLASWD(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:) - ZTDIRSRFSWD(3:IDIMX-2,3:IDIMY-2,:) = ZTDIRSRFSWD(3:IDIMX-2,3:IDIMY-2,:)& + ZTDIRSRFSWD(IIBC:IIEC,IJBC:IJEC,:) = ZTDIRSRFSWD(IIBC:IIEC,IJBC:IJEC,:)& +XDIRSRFSWD(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:) END DO END DO - ZTDIRFLASWD(3:IDIMX-2,3:IDIMY-2,:) = ZTDIRFLASWD(3:IDIMX-2,3:IDIMY-2,:)/(IDXRATIO*IDYRATIO) - ZTSCAFLASWD(3:IDIMX-2,3:IDIMY-2,:) = ZTSCAFLASWD(3:IDIMX-2,3:IDIMY-2,:)/(IDXRATIO*IDYRATIO) - ZTDIRSRFSWD(3:IDIMX-2,3:IDIMY-2,:) = ZTDIRSRFSWD(3:IDIMX-2,3:IDIMY-2,:)/(IDXRATIO*IDYRATIO) + ZTDIRFLASWD(IIBC:IIEC,IJBC:IJEC,:) = ZTDIRFLASWD(IIBC:IIEC,IJBC:IJEC,:)/(IDXRATIO*IDYRATIO) + ZTSCAFLASWD(IIBC:IIEC,IJBC:IJEC,:) = ZTSCAFLASWD(IIBC:IIEC,IJBC:IJEC,:)/(IDXRATIO*IDYRATIO) + ZTDIRSRFSWD(IIBC:IIEC,IJBC:IJEC,:) = ZTDIRSRFSWD(IIBC:IIEC,IJBC:IJEC,:)/(IDXRATIO*IDYRATIO) END IF ! !------------------------------------------------------------------------------- @@ -779,11 +786,11 @@ DO JX=1,IDXRATIO II2 = IIE+JX-IDXRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTWM(3:IDIMX-2,3:IDIMY-2,IKB) = ZTWM(3:IDIMX-2,3:IDIMY-2,IKB) & + ZTWM(IIBC:IIEC,IJBC:IJEC,IKB) = ZTWM(IIBC:IIEC,IJBC:IJEC,IKB) & +2.*XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,IKB) & *XWT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,IKB) ! - ZTWM(3:IDIMX-2,3:IDIMY-2,IKB+1:IKU) = ZTWM(3:IDIMX-2,3:IDIMY-2,IKB+1:IKU) & + ZTWM(IIBC:IIEC,IJBC:IJEC,IKB+1:IKU) = ZTWM(IIBC:IIEC,IJBC:IJEC,IKB+1:IKU) & +(XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,IKB+1:IKU ) & + XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,IKB :IKU-1))& *XWT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,IKB+1:IKU) @@ -796,10 +803,10 @@ ZTRHODJU(:,:,:) = 0. ! IF(LWEST_ll()) THEN II1U = IIB+IDXRATIO !C grid - IWEST=4 + IWEST=JPHEXT+3 ELSE II1U = IIB - IWEST=3 + IWEST=JPHEXT+2 ENDIF ! II2 = IIE+1-IDXRATIO @@ -807,7 +814,7 @@ II2 = IIE+1-IDXRATIO DO JY=1,IDYRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTRHODJU(IWEST:IDIMX-2,3:IDIMY-2,:) = ZTRHODJU(IWEST:IDIMX-2,3:IDIMY-2,:) & + ZTRHODJU(IWEST:IIEC,IJBC:IJEC,:) = ZTRHODJU(IWEST:IIEC,IJBC:IJEC,:) & +XRHODJ(II1U :II2 :IDXRATIO,IJ1:IJ2:IDYRATIO,:) & +XRHODJ(II1U-1:II2-1:IDXRATIO,IJ1:IJ2:IDYRATIO,:) END DO @@ -817,7 +824,7 @@ ZTUM(:,:,:) = 0. DO JY=1,IDYRATIO IJ1 = IJB+JY-1 IJ2 = IJE+JY-IDYRATIO - ZTUM(IWEST:IDIMX-2,3:IDIMY-2,:) = ZTUM(IWEST:IDIMX-2,3:IDIMY-2,:) & + ZTUM(IWEST:IIEC,IJBC:IJEC,:) = ZTUM(IWEST:IIEC,IJBC:IJEC,:) & +(XRHODJ(II1U :II2 :IDXRATIO,IJ1:IJ2:IDYRATIO,:) & +XRHODJ(II1U-1:II2-1:IDXRATIO,IJ1:IJ2:IDYRATIO,:)) & *XUT(II1U :II2 :IDXRATIO,IJ1:IJ2:IDYRATIO,:) @@ -830,10 +837,10 @@ ZTRHODJV(:,:,:) = 0. ! IF(LSOUTH_ll() .AND. .NOT. L2D) THEN IJ1V = IJB+IDYRATIO !C grid - ISOUTH=4 + ISOUTH=JPHEXT+3 ELSE IJ1V = IJB - ISOUTH=3 + ISOUTH=JPHEXT+2 ENDIF ! IJ2 = IJE+1-IDYRATIO @@ -841,7 +848,7 @@ IJ2 = IJE+1-IDYRATIO DO JX=1,IDXRATIO II1 = IIB+JX-1 II2 = IIE+JX-IDXRATIO - ZTRHODJV(3:IDIMX-2,ISOUTH:IDIMY-2,:) = ZTRHODJV(3:IDIMX-2,ISOUTH:IDIMY-2,:) & + ZTRHODJV(IIBC:IIEC,ISOUTH:IJEC,:) = ZTRHODJV(IIBC:IIEC,ISOUTH:IJEC,:) & +XRHODJ(II1:II2:IDXRATIO,IJ1V :IJ2 :IDYRATIO,:) & +XRHODJ(II1:II2:IDXRATIO,IJ1V-1:IJ2-1:IDYRATIO,:) END DO @@ -851,7 +858,7 @@ ZTVM(:,:,:) = 0. DO JX=1,IDXRATIO II1 = IIB+JX-1 II2 = IIE+JX-IDXRATIO - ZTVM(3:IDIMX-2,ISOUTH:IDIMY-2,:) = ZTVM(3:IDIMX-2,ISOUTH:IDIMY-2,:) & + ZTVM(IIBC:IIEC,ISOUTH:IJEC,:) = ZTVM(IIBC:IIEC,ISOUTH:IJEC,:) & +(XRHODJ(II1:II2:IDXRATIO,IJ1V :IJ2 :IDYRATIO,:) & + XRHODJ(II1:II2:IDXRATIO,IJ1V-1:IJ2-1:IDYRATIO,:)) & *XVT(II1:II2:IDXRATIO,IJ1V :IJ2 :IDYRATIO,:) @@ -1019,7 +1026,7 @@ ENDIF ! 5.1 Compute the bounds of relaxation area ! IHALO=2 -IF (JPHEXT/=1) STOP ! boundaries are hard coded supposing JPHEXT=1 +!!$IF (JPHEXT/=1) STOP ! boundaries are hard coded supposing JPHEXT=1 ! CALL GET_OR_ll('B',IXOR_ll,IYOR_ll) CALL GET_DIM_EXT_ll('B',IXDIM,IYDIM) diff --git a/src/MNH/update_lm.f90 b/src/MNH/update_lm.f90 index c8b386eda..5b8310ed7 100644 --- a/src/MNH/update_lm.f90 +++ b/src/MNH/update_lm.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 newsrc 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ################### MODULE MODI_UPDATE_LM @@ -59,6 +58,7 @@ END MODULE MODI_UPDATE_LM !! ------------- !! Original april 2006 !! V.Masson : Exchange of East and North sides +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -95,11 +95,7 @@ INTEGER :: IINFO_ll ! return code of parallel routine ! !* 1. COMPUTE DIMENSIONS OF ARRAYS : ! ---------------------------- -IIB = 1 + JPHEXT -IJB = 1 + JPHEXT -! -IIE = SIZE(PLM,1) - JPHEXT -IJE = SIZE(PLM,2) - JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) NULLIFY(TZLM_ll) ! !------------------------------------------------------------------------------- @@ -108,12 +104,12 @@ NULLIFY(TZLM_ll) ! ------------- ! ! -IF(NHALO == 1) THEN +!!$IF(NHALO == 1) THEN CALL ADD3DFIELD_ll(TZLM_ll,PLM) CALL ADD3DFIELD_ll(TZLM_ll,PLEPS) CALL UPDATE_HALO_ll(TZLM_ll,IINFO_ll) CALL CLEANLIST_ll(TZLM_ll) -END IF +!!$END IF ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/update_metrics.f90 b/src/MNH/update_metrics.f90 index e4a18893a..a391aab9d 100644 --- a/src/MNH/update_metrics.f90 +++ b/src/MNH/update_metrics.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 newsrc 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ################### MODULE MODI_UPDATE_METRICS @@ -61,6 +60,7 @@ END MODULE MODI_UPDATE_METRICS !! ------------- !! Original april 2006 !! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -105,22 +105,6 @@ NULLIFY(TZMETRICS_ll) ! !------------------------------------------------------------------------------- ! -!* 2. UPDATE HALOs : -! ------------- -! -! -!!$IF(NHALO == 1) THEN - CALL ADD3DFIELD_ll(TZMETRICS_ll,PDXX) - CALL ADD3DFIELD_ll(TZMETRICS_ll,PDYY) - CALL ADD3DFIELD_ll(TZMETRICS_ll,PDZX) - CALL ADD3DFIELD_ll(TZMETRICS_ll,PDZY) - CALL ADD3DFIELD_ll(TZMETRICS_ll,PDZZ) - CALL UPDATE_HALO_ll(TZMETRICS_ll,IINFO_ll) - CALL CLEANLIST_ll(TZMETRICS_ll) -!!$END IF -! -!------------------------------------------------------------------------------- -! !* 3. UPDATE EXTERNAL POINTS OF GLOBAL DOMAIN: ! --------------------------------------- ! @@ -134,5 +118,22 @@ IF ( HLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN PDZY(JI,IJB-1,:) = PDZY(JI,IJB,:) END DO END IF + +!------------------------------------------------------------------------------- +! +!* 2. UPDATE HALOs : +! ------------- +! +! +!!$IF(NHALO == 1) THEN + CALL ADD3DFIELD_ll(TZMETRICS_ll,PDXX) + CALL ADD3DFIELD_ll(TZMETRICS_ll,PDYY) + CALL ADD3DFIELD_ll(TZMETRICS_ll,PDZX) + CALL ADD3DFIELD_ll(TZMETRICS_ll,PDZY) + CALL ADD3DFIELD_ll(TZMETRICS_ll,PDZZ) + CALL UPDATE_HALO_ll(TZMETRICS_ll,IINFO_ll) + CALL CLEANLIST_ll(TZMETRICS_ll) +!!$END IF + !----------------------------------------------------------------------------- END SUBROUTINE UPDATE_METRICS diff --git a/src/MNH/ver_dyn.f90 b/src/MNH/ver_dyn.f90 index eccf8243f..f7fbb9942 100644 --- a/src/MNH/ver_dyn.f90 +++ b/src/MNH/ver_dyn.f90 @@ -6,9 +6,8 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/07/07 12:19:27 !----------------------------------------------------------------- -! ######spl +! ################### MODULE MODI_VER_DYN ! ################### INTERFACE @@ -132,6 +131,7 @@ END MODULE MODI_VER_DYN !! interpolation routine !! V.Masson 24/11/97 use of the 3D dry density !! J.Stein 20:01/98 add the LS field interpolation +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -217,11 +217,8 @@ INTEGER :: IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV ! dimensions of the INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2 ! North-south LB arrays !------------------------------------------------------------------------------- ! -IIB=JPHEXT+1 -IIE=SIZE(PJ,1)-JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IIU=SIZE(PJ,1) -IJB=JPHEXT+1 -IJE=SIZE(PJ,2)-JPHEXT IJU=SIZE(PJ,2) IKB=JPVEXT+1 IKE=SIZE(PJ,3)-JPVEXT @@ -366,10 +363,10 @@ CALL EXTRAPOL('E',XLSVM) IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2) IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2 - NSIZELBXU_ll=2*NRIMX+2 - NSIZELBY_ll=2*NRIMY+2 - NSIZELBYV_ll=2*NRIMY+2 + NSIZELBX_ll=2*NRIMX+2*JPHEXT + NSIZELBXU_ll=2*NRIMX+2*JPHEXT + NSIZELBY_ll=2*NRIMY+2*JPHEXT + NSIZELBYV_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU)) ALLOCATE(XLBYUM(IISIZEYF,IJSIZEYF,IKU)) ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU)) @@ -379,10 +376,10 @@ CALL EXTRAPOL('E',XLSVM) !ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) !ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,IKU)) ELSE - NSIZELBX_ll=2 - NSIZELBXU_ll=4 - NSIZELBY_ll=2 - NSIZELBYV_ll=4 + NSIZELBX_ll= 2*JPHEXT ! 2 + NSIZELBXU_ll= 2*(JPHEXT+1) ! 4 + NSIZELBY_ll=2*JPHEXT ! 2 + NSIZELBYV_ll= 2*(JPHEXT+1) ! 4 ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU)) ALLOCATE(XLBYUM(IISIZEY2,IJSIZEY2,IKU)) ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU)) @@ -396,27 +393,27 @@ CALL EXTRAPOL('E',XLSVM) ILBX=SIZE(XLBXUM,1) ILBY=SIZE(XLBYUM,2) IF(LWEST_ll() .AND. .NOT. L1D) THEN - XLBXUM(1:NRIMX+1, :,:) = XUT(2:NRIMX+2, :,:) - XLBXVM(1:NRIMX+1, :,:) = XVT(1:NRIMX+1, :,:) - XLBXWM(1:NRIMX+1, :,:) = XWT(1:NRIMX+1, :,:) + XLBXUM(1:NRIMX+JPHEXT, :,:) = XUT(2:NRIMX+JPHEXT+1, :,:) + XLBXVM(1:NRIMX+JPHEXT, :,:) = XVT(1:NRIMX+JPHEXT, :,:) + XLBXWM(1:NRIMX+JPHEXT, :,:) = XWT(1:NRIMX+JPHEXT, :,:) ENDIF IF(LEAST_ll() .AND. .NOT. L1D) THEN - XLBXUM(ILBX-NRIMX:ILBX,:,:) = XUT(IIU-NRIMX:IIU, :,:) - XLBXVM(ILBX-NRIMX:ILBX,:,:) = XVT(IIU-NRIMX:IIU, :,:) - XLBXWM(ILBX-NRIMX:ILBX,:,:) = XWT(IIU-NRIMX:IIU, :,:) + XLBXUM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XUT(IIU-NRIMX-JPHEXT+1:IIU, :,:) + XLBXVM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XVT(IIU-NRIMX-JPHEXT+1:IIU, :,:) + XLBXWM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XWT(IIU-NRIMX-JPHEXT+1:IIU, :,:) ENDIF IF(LSOUTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) THEN - XLBYUM(:,1:NRIMY+1, :) = XUT(:,1:NRIMY+1, :) - XLBYVM(:,1:NRIMY+1, :) = XVT(:,2:NRIMY+2, :) - XLBYWM(:,1:NRIMY+1, :) = XWT(:,1:NRIMY+1, :) + XLBYUM(:,1:NRIMY+JPHEXT, :) = XUT(:,1:NRIMY+JPHEXT, :) + XLBYVM(:,1:NRIMY+JPHEXT, :) = XVT(:,2:NRIMY+JPHEXT+1, :) + XLBYWM(:,1:NRIMY+JPHEXT, :) = XWT(:,1:NRIMY+JPHEXT, :) ENDIF IF(LNORTH_ll().AND. .NOT. L1D .AND. .NOT. L2D) THEN - XLBYUM(:,ILBY-NRIMY:ILBY,:) = XUT(:,IJU-NRIMY:IJU, :) - XLBYVM(:,ILBY-NRIMY:ILBY,:) = XVT(:,IJU-NRIMY:IJU, :) - XLBYWM(:,ILBY-NRIMY:ILBY,:) = XWT(:,IJU-NRIMY:IJU, :) + XLBYUM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XUT(:,IJU-NRIMY-JPHEXT+1:IJU, :) + XLBYVM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XVT(:,IJU-NRIMY-JPHEXT+1:IJU, :) + XLBYWM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XWT(:,IJU-NRIMY-JPHEXT+1:IJU, :) ENDIF diff --git a/src/MNH/ver_int_thermo.f90 b/src/MNH/ver_int_thermo.f90 index e86b24015..85e22d053 100644 --- a/src/MNH/ver_int_thermo.f90 +++ b/src/MNH/ver_int_thermo.f90 @@ -133,6 +133,7 @@ END MODULE MODI_VER_INT_THERMO !! interpolation routine !! 26/01/98 (J. Stein) add the LS fields' treatment !! 24/04/2014 (J.escobar) bypass CRAY internal compiler error on IIJ computation +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -257,13 +258,10 @@ INTEGER,DIMENSION(SIZE(PZMASS_MX,1),SIZE(PZMASS_MX,2)) :: IJCOUNT ! CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=JPVEXT+1 IKE=SIZE(XZZ,3)-JPVEXT IKU=SIZE(XZZ,3) -IIB=JPHEXT+1 -IJB=JPHEXT+1 -IIE=SIZE(XZZ,1)-JPHEXT -IJE=SIZE(XZZ,2)-JPHEXT ! ! !------------------------------------------------------------------------------- diff --git a/src/MNH/ver_interp_to_mixed_grid.f90 b/src/MNH/ver_interp_to_mixed_grid.f90 index 2650e760f..75c09fd95 100644 --- a/src/MNH/ver_interp_to_mixed_grid.f90 +++ b/src/MNH/ver_interp_to_mixed_grid.f90 @@ -162,6 +162,7 @@ END MODULE MODI_VER_INTERP_TO_MIXED_GRID !! 20/05/06 Remove EPS !! 10/04/2014 (J.Escobar & M.Faivre ) add reprod_sum on XEXNTOP !! 24/04/2014 (J.escobar) bypass CRAY internal compiler error on IIJ computation +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -256,13 +257,10 @@ INTEGER,DIMENSION(SIZE(PZMASS_LS,1),SIZE(PZMASS_LS,2)) :: IJCOUNT ! CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IIU=SIZE(PZMASS_LS,1) IJU=SIZE(PZMASS_LS,2) IKU=SIZE(XZHAT) -IIB=JPHEXT+1 -IIE=IIU-JPHEXT -IJB=JPHEXT+1 -IJE=IJU-JPHEXT IKE=IKU-JPVEXT ILU=SIZE(PZMASS_LS,3) ! diff --git a/src/MNH/ver_prep_mesonh_case.f90 b/src/MNH/ver_prep_mesonh_case.f90 index 359017cad..8ff112327 100644 --- a/src/MNH/ver_prep_mesonh_case.f90 +++ b/src/MNH/ver_prep_mesonh_case.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/05/29 13:03:00 !----------------------------------------------------------------- ! ################################ MODULE MODI_VER_PREP_MESONH_CASE @@ -83,6 +82,7 @@ END MODULE MODI_VER_PREP_MESONH_CASE !! Jun, 10 1997 (V. Masson) add non-hydrostatic pressure !! Jul, 10 1997 (V. Masson) add epsilon !! Jul, 11 1997 (V. Masson) add scalar variables +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -106,6 +106,7 @@ USE MODD_PARAMETERS USE MODD_PREP_REAL ! USE MODI_SECOND_MNH +USE MODE_ll ! IMPLICIT NONE ! @@ -132,11 +133,15 @@ REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZHEXNFLUX_MX! hyd. pressure function REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZHEXNMASS_MX! hyd. pressure function REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZPMASS_MX ! pressure REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZWORK ! work array +! +INTEGER :: IIB,IJB,IIE,IJE !------------------------------------------------------------------------------- ! !* 1. CHANGING OF VARIABLES ! --------------------- ! +CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) +! IIU=SIZE(XZS_LS,1) IJU=SIZE(XZS_LS,2) ILU=SIZE(XZHAT_LS) @@ -166,15 +171,23 @@ ALLOCATE(ZWORK(IIU,IJU,ILU)) ZWORK = XU_LS XU_LS(1:IIU-1,:,:)=0.5*ZWORK(2:IIU,:,:)+0.5*ZWORK(1:IIU-1,:,:) XU_LS(IIU ,:,:)=1.5*ZWORK(IIU ,:,:)-0.5*ZWORK(IIU-1 ,:,:) +XU_LS(IIE+1 ,:,:)=1.5*ZWORK(IIE+1 ,:,:)-0.5*ZWORK(IIE ,:,:) ! for JPHEXT <> 1 + ZWORK = XV_LS XV_LS(:,1:IJU-1,:)=0.5*ZWORK(:,2:IJU,:)+0.5*ZWORK(:,1:IJU-1,:) XV_LS(:,IJU ,:)=1.5*ZWORK(:,IJU ,:)-0.5*ZWORK(:,IJU-1 ,:) +XV_LS(:,IJE+1 ,:)=1.5*ZWORK(:,IJE+1 ,:)-0.5*ZWORK(:,IJE ,:) ! for JPHEXT <> 1 + ZWORK = XLSU_LS XLSU_LS(1:IIU-1,:,:)=0.5*ZWORK(2:IIU,:,:)+0.5*ZWORK(1:IIU-1,:,:) XLSU_LS(IIU ,:,:)=1.5*ZWORK(IIU ,:,:)-0.5*ZWORK(IIU-1 ,:,:) +XLSU_LS(IIE+1 ,:,:)=1.5*ZWORK(IIE+1 ,:,:)-0.5*ZWORK(IIE ,:,:) ! for JPHEXT <> 1 + ZWORK = XLSV_LS XLSV_LS(:,1:IJU-1,:)=0.5*ZWORK(:,2:IJU,:)+0.5*ZWORK(:,1:IJU-1,:) XLSV_LS(:,IJU ,:)=1.5*ZWORK(:,IJU ,:)-0.5*ZWORK(:,IJU-1 ,:) +XLSV_LS(:,IJE+1 ,:)=1.5*ZWORK(:,IJE+1 ,:)-0.5*ZWORK(:,IJE ,:) ! for JPHEXT <> 1 + DEALLOCATE(ZWORK) ! !* 1.5 Difference between pressure and hydrostatic pressure diff --git a/src/MNH/ver_thermo.f90 b/src/MNH/ver_thermo.f90 index 90412d205..7cfff4243 100644 --- a/src/MNH/ver_thermo.f90 +++ b/src/MNH/ver_thermo.f90 @@ -6,9 +6,8 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/07/07 12:04:57 !----------------------------------------------------------------- -! ######spl +! ###################### MODULE MODI_VER_THERMO ! ###################### INTERFACE @@ -146,6 +145,7 @@ END MODULE MODI_VER_THERMO !! Jun. 06, 2006 (Mallet) replace DRY_MASS by TOTAL_DMASS !! October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after !! change of YCOMMENT +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -231,11 +231,8 @@ INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2 ! North-south LB arrays !------------------------------------------------------------------------------- ! -IIB=JPHEXT+1 -IIE=SIZE(PJ,1)-JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IIU=SIZE(PJ,1) -IJB=JPHEXT+1 -IJE=SIZE(PJ,2)-JPHEXT IJU=SIZE(PJ,2) IKB=JPVEXT+1 IKE=SIZE(PJ,3)-JPVEXT @@ -395,17 +392,17 @@ XLSRVM(:,:,IKE+1)=XLSRVM(:,:,IKE) CALL EXTRAPOL('E',XLSTHM,XLSRVM) ! IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2 - NSIZELBXU_ll=2*NRIMX+2 - NSIZELBY_ll=2*NRIMY+2 - NSIZELBYV_ll=2*NRIMY+2 + NSIZELBX_ll=2*NRIMX+2*JPHEXT + NSIZELBXU_ll=2*NRIMX+2*JPHEXT + NSIZELBY_ll=2*NRIMY+2*JPHEXT + NSIZELBYV_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,IKU)) ELSE - NSIZELBX_ll=2 - NSIZELBXU_ll=4 - NSIZELBY_ll=2 - NSIZELBYV_ll=4 + NSIZELBX_ll=2*JPHEXT ! 2 + NSIZELBXU_ll=2*(JPHEXT+1) ! 4 + NSIZELBY_ll=2*JPHEXT ! 2 + NSIZELBYV_ll=2*(JPHEXT+1) ! 4 ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,IKU)) ALLOCATE(XLBYTHM(IISIZEY2,IJSIZEY2,IKU)) END IF @@ -421,31 +418,31 @@ IF ( NRR > 0 ) THEN IF ( LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & ) THEN -! ALLOCATE(XLBXRM(2*NRIMX+2,IJU,IKU,NRR)) -! ALLOCATE(XLBYRM(IIU,2*NRIMY+2,IKU,NRR)) +! ALLOCATE(XLBXRM(2*NRIMX+2*JPHEXT,IJU,IKU,NRR)) +! ALLOCATE(XLBYRM(IIU,2*NRIMY+2*JPHEXT,IKU,NRR)) ! ELSE ! ALLOCATE(XLBXRM(2,IJU,IKU,NRR)) ! ALLOCATE(XLBYRM(IIU,2,IKU,NRR)) - NSIZELBXR_ll=2*NRIMX+2 - NSIZELBYR_ll=2*NRIMY+2 + NSIZELBXR_ll=2*NRIMX+2*JPHEXT + NSIZELBYR_ll=2*NRIMY+2*JPHEXT ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR)) ALLOCATE(XLBYRM(IISIZEYF,IJSIZEYF,IKU,NRR)) ELSE - NSIZELBXR_ll=2 - NSIZELBYR_ll=2 + NSIZELBXR_ll=2*JPHEXT !2 + NSIZELBYR_ll=2*JPHEXT !2 ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR)) ALLOCATE(XLBYRM(IISIZEY2,IJSIZEY2,IKU,NRR)) ENDIF ! IF (SIZE(XLBXRM) .NE. 0 ) THEN - ILBX=SIZE(XLBXRM,1)/2-1 - XLBXRM(1:ILBX+1,:,:,:) = XRT(IIB-1:IIB-1+ILBX,:,:,:) - XLBXRM(ILBX+2:2*ILBX+2,:,:,:) = XRT(IIE+1-ILBX:IIE+1,:,:,:) + ILBX=SIZE(XLBXRM,1)/2-JPHEXT + XLBXRM(1:ILBX+JPHEXT,:,:,:) = XRT(1:ILBX+JPHEXT,:,:,:) + XLBXRM(ILBX+JPHEXT+1:2*ILBX+2*JPHEXT,:,:,:) = XRT(IIE+1-ILBX:IIE+JPHEXT,:,:,:) ENDIF IF (SIZE(XLBYRM) .NE. 0 ) THEN - ILBY=SIZE(XLBYRM,2)/2-1 - XLBYRM(:,1:ILBY+1,:,:) = XRT(:,IJB-1:IJB-1+ILBY,:,:) - XLBYRM(:,ILBY+2:2*ILBY+2,:,:) = XRT(:,IJE+1-ILBY:IJE+1,:,:) + ILBY=SIZE(XLBYRM,2)/2-JPHEXT + XLBYRM(:,1:ILBY+JPHEXT,:,:) = XRT(:,1:ILBY+JPHEXT,:,:) + XLBYRM(:,ILBY+JPHEXT+1:2*ILBY+2*JPHEXT,:,:) = XRT(:,IJE+1-ILBY:IJE+JPHEXT,:,:) ENDIF ELSE NSIZELBXR_ll=0 @@ -460,20 +457,20 @@ END IF ILBX=SIZE(XLBXTHM,1) ILBY=SIZE(XLBYTHM,2) IF(LWEST_ll() .AND. .NOT. L1D) THEN - XLBXTHM(1:NRIMX+1, :,:) = XTHT(1:NRIMX+1, :,:) - XLBXRM(1:NRIMX+1, :,:,:) = XRT(1:NRIMX+1, :,:,:) + XLBXTHM(1:NRIMX+JPHEXT, :,:) = XTHT(1:NRIMX+JPHEXT, :,:) + XLBXRM(1:NRIMX+JPHEXT, :,:,:) = XRT(1:NRIMX+JPHEXT, :,:,:) ENDIF IF(LEAST_ll() .AND. .NOT. L1D) THEN - XLBXTHM(ILBX-NRIMX:ILBX,:,:) = XTHT(IIU-NRIMX:IIU, :,:) - XLBXRM(ILBX-NRIMX:ILBX,:,:,:) = XRT(IIU-NRIMX:IIU, :,:,:) + XLBXTHM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XTHT(IIU-NRIMX-JPHEXT+1:IIU, :,:) + XLBXRM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:,:) = XRT(IIU-NRIMX-JPHEXT+1:IIU, :,:,:) ENDIF IF(LSOUTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) THEN - XLBYTHM(:,1:NRIMY+1, :) = XTHT(:,1:NRIMY+1, :) - XLBYRM(:,1:NRIMY+1, :,:) = XRT(:,1:NRIMY+1, :,:) + XLBYTHM(:,1:NRIMY+JPHEXT, :) = XTHT(:,1:NRIMY+JPHEXT, :) + XLBYRM(:,1:NRIMY+JPHEXT, :,:) = XRT(:,1:NRIMY+JPHEXT, :,:) ENDIF IF(LNORTH_ll().AND. .NOT. L1D .AND. .NOT. L2D) THEN - XLBYTHM(:,ILBY-NRIMY:ILBY,:) = XTHT(:,IJU-NRIMY:IJU, :) - XLBYRM(:,ILBY-NRIMY:ILBY,:,:) = XRT(:,IJU-NRIMY:IJU, :,:) + XLBYTHM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XTHT(:,IJU-NRIMY-JPHEXT+1:IJU, :) + XLBYRM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:,:) = XRT(:,IJU-NRIMY-JPHEXT+1:IJU, :,:) ENDIF ! !------------------------------------------------------------------------------- diff --git a/src/MNH/vert_coord.f90 b/src/MNH/vert_coord.f90 index 98e32a876..4838d7fc9 100644 --- a/src/MNH/vert_coord.f90 +++ b/src/MNH/vert_coord.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 newsrc 2006/07/27 17:27:30 !----------------------------------------------------------------- ! ###################### MODULE MODI_VERT_COORD @@ -64,6 +63,7 @@ END MODULE MODI_VERT_COORD !! Original nov 2005 !! J.-P. Pinty jan 2011 Optimisation according to Leuenberger et al, !! MWR (2010) in the case of SLEVE coord. +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -159,6 +159,9 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)) :: ZZSMALL ! small-scale topography REAL :: ZH ! model top REAL :: ZEXP ! Exponent (1.35 is the ! optimal value) +! +INTEGER :: II,IJ,IK ! loop indices +! !------------------------------------------------------------------------------- ! IIU = SIZE(PZZ,1) @@ -174,13 +177,24 @@ ZZSMALL(:,:) = PZS(:,:) - PZSMT(:,:) ! Small-scale topography deviation ! Sleve coordinate ! ZEXP = 1.35 -PZZ(:,:,IKB:IKU) = SPREAD(SPREAD(PZHAT(IKB:IKU),1,IIU),2,IJU) + & - SPREAD(PZSMT(1:IIU,1:IJU),3,IKU-IKB+1) * SINH( (ZH/PLEN1)**ZEXP & - - (SPREAD(SPREAD(PZHAT(IKB:IKU),1,IIU),2,IJU)/PLEN1)**ZEXP ) / & - SINH( (ZH/PLEN1)**ZEXP ) + & - SPREAD(ZZSMALL(1:IIU,1:IJU),3,IKU-IKB+1) * SINH( (ZH/PLEN2)**ZEXP & - - (SPREAD(SPREAD(PZHAT(IKB:IKU),1,IIU),2,IJU)/PLEN2)**ZEXP ) / & - SINH( (ZH/PLEN2)**ZEXP ) + +DO IK=IKB,IKU ; DO IJ=1,IJU ; DO II=1,IIU +PZZ(II,IJ,IK) = PZHAT(IK) + PZSMT(II,IJ) * & + SINH( (ZH/PLEN1)**ZEXP - (PZHAT(IK)/PLEN1)**ZEXP ) / & + SINH( (ZH/PLEN1)**ZEXP ) + & + ZZSMALL(II,IJ) * & + SINH( (ZH/PLEN2)**ZEXP - (PZHAT(IK)/PLEN2)**ZEXP ) / & + SINH( (ZH/PLEN2)**ZEXP ) +END DO ; END DO ; END DO + +!!$PZZ(:,:,IKB:IKU) = SPREAD(SPREAD(PZHAT(IKB:IKU),1,IIU),2,IJU) + & +!!$ SPREAD(PZSMT(1:IIU,1:IJU),3,IKU-IKB+1) * SINH( (ZH/PLEN1)**ZEXP & +!!$ - (SPREAD(SPREAD(PZHAT(IKB:IKU),1,IIU),2,IJU)/PLEN1)**ZEXP ) / & +!!$ SINH( (ZH/PLEN1)**ZEXP ) + & +!!$ SPREAD(ZZSMALL(1:IIU,1:IJU),3,IKU-IKB+1) * SINH( (ZH/PLEN2)**ZEXP & +!!$ - (SPREAD(SPREAD(PZHAT(IKB:IKU),1,IIU),2,IJU)/PLEN2)**ZEXP ) / & +!!$ SINH( (ZH/PLEN2)**ZEXP ) + ! ! Ensure symmetry of layer depths below/above the true surface level ! This is essential (!) for a correct surface pressure gradient computation over sloping topography @@ -249,6 +263,8 @@ INTEGER :: IKE ! upper physical point REAL :: ZH ! model top REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)) :: ZCOEF ! 1-zs/H ! +INTEGER :: II,IJ,IK ! loop indices +! !------------------------------------------------------------------------------- ! IIU = SIZE(PZZ,1) @@ -259,9 +275,14 @@ IKE = IKU - JPVEXT ZH = PZHAT(IKE+1) ! ZCOEF(:,:) = 1.-PZS(:,:)/ZH -PZZ(:,:,:) = SPREAD(SPREAD(PZHAT(1:IKU),1,IIU),2,IJU) & - * SPREAD(ZCOEF(1:IIU,1:IJU),3,IKU) & - + SPREAD(PZS(1:IIU,1:IJU),3,IKU) + +!!$PZZ(:,:,:) = SPREAD(SPREAD(PZHAT(1:IKU),1,IIU),2,IJU) & +!!$ * SPREAD(ZCOEF(1:IIU,1:IJU),3,IKU) & +!!$ + SPREAD(PZS(1:IIU,1:IJU),3,IKU) + +DO IK=1,IKU ; DO IJ=1,IJU ; DO II=1,IIU + PZZ(II,IJ,IK) = PZHAT(IK) * ZCOEF(II,IJ) + PZS(II,IJ) +END DO ; END DO ; END DO ! ! This is essential (!) for a correct surface pressure gradient computation over sloping topography PZZ(:,:,1) = 2.*PZZ(:,:,2)-PZZ(:,:,3) diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90 index b735d9489..906d3aab2 100644 --- a/src/MNH/write_lbn.f90 +++ b/src/MNH/write_lbn.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_8 init 2008/06/30 12:13:35 !----------------------------------------------------------------- ! ###################### MODULE MODI_WRITE_LB_n @@ -75,6 +74,7 @@ END MODULE MODI_WRITE_LB_n !! change of YCOMMENT !! M. Leriche 07/10 add NSV_* for ice phase chemistry !! P. Tulet 09/14 modif SALT +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -109,6 +109,7 @@ USE MODD_DUST USE MODD_SALT USE MODI_DUSTLFI_n USE MODI_SALTLFI_n +USE MODD_PARAMETERS, ONLY: JPHEXT ! @@ -173,10 +174,10 @@ CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LHORELAX_UVWTH,IGRID,ILENCH,YCOMMENT,IRES ! ! ! compute the size of riming zone -IRIMX =(NSIZELBX_ll-1)/2 -IRIMXU=(NSIZELBXU_ll-1)/2 -IRIMY =(NSIZELBY_ll-1)/2 -IRIMYV=(NSIZELBYV_ll-1)/2 +IRIMX =(NSIZELBX_ll-2*JPHEXT)/2 +IRIMXU=(NSIZELBXU_ll-2*JPHEXT)/2 +IRIMY =(NSIZELBY_ll-2*JPHEXT)/2 +IRIMYV=(NSIZELBYV_ll-2*JPHEXT)/2 ! !gathering and writing of the LB fields IF(NSIZELBXU_ll /= 0) THEN @@ -259,8 +260,8 @@ IF(CTURB/='NONE') THEN YRECFM = 'HORELAX_TKE' CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LHORELAX_TKE,IGRID,ILENCH,YCOMMENT,IRESP) ! - IRIMX =(NSIZELBXTKE_ll-1)/2 - IRIMY =(NSIZELBYTKE_ll-1)/2 + IRIMX =(NSIZELBXTKE_ll-2*JPHEXT)/2 + IRIMY =(NSIZELBYTKE_ll-2*JPHEXT)/2 IF(NSIZELBXTKE_ll /= 0) THEN YRECFM='LBXTKEM' @@ -297,8 +298,8 @@ IF (NRR >=1) THEN ! GUSER(:)=(/LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH/) YC(:)=(/"V","C","R","I","S","G","H"/) - IRIMX =(NSIZELBXR_ll-1)/2 - IRIMY =(NSIZELBYR_ll-1)/2 + IRIMX =(NSIZELBXR_ll-2*JPHEXT)/2 + IRIMY =(NSIZELBYR_ll-2*JPHEXT)/2 IRR=0 ! Loop on moist variables DO JRR=1,7 @@ -334,8 +335,8 @@ IF (NSV >=1) THEN GHORELAX_SV=ANY ( LHORELAX_SV ) CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,GHORELAX_SV,IGRID,ILENCH,YCOMMENT,IRESP) IGRID=1 - IRIMX =(NSIZELBXSV_ll-1)/2 - IRIMY =(NSIZELBYSV_ll-1)/2 + IRIMX =(NSIZELBXSV_ll-2*JPHEXT)/2 + IRIMY =(NSIZELBYSV_ll-2*JPHEXT)/2 DO JSV = 1,NSV_USER IF(NSIZELBXSV_ll /= 0) THEN WRITE(YRECFM,'(A6,I3.3)')'LBXSVM',JSV diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90 index a4a61b436..925f663b4 100644 --- a/src/MNH/write_lfifm1_for_diag_supp.f90 +++ b/src/MNH/write_lfifm1_for_diag_supp.f90 @@ -80,11 +80,13 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG_SUPP !! October 2011 (C.Lac) FF10MAX : interpolation of 10m wind !! between 2 Meso-NH levels if 10m is above the first atmospheric level !! 2015 : D.Ricard add UM10/VM10 for LCARTESIAN=T cases +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! +USE MODE_ll USE MODD_CST USE MODD_PARAMETERS USE MODD_CONF_n @@ -198,11 +200,8 @@ REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZCORIOZ IIU=NIMAX+2*JPHEXT IJU=NJMAX+2*JPHEXT IKU=NKMAX+2*JPVEXT -IIB=1+JPHEXT -IJB=1+JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT -IIE=IIU-JPHEXT -IJE=IJU-JPHEXT IKE=IKU-JPVEXT ! ALLOCATE(ZWORK21(IIU,IJU)) diff --git a/src/MNH/write_lfifmn_fordiachron.f90 b/src/MNH/write_lfifmn_fordiachron.f90 index 3a9a90144..3f59602ab 100644 --- a/src/MNH/write_lfifmn_fordiachron.f90 +++ b/src/MNH/write_lfifmn_fordiachron.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 diachro 2006/05/18 13:07:25 !----------------------------------------------------------------- ! ############################################# SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n(HFMFILE) @@ -81,6 +80,7 @@ !! J. DURON 24/06/99 add GPACK varaible to disable pack option !! October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after !! change of YCOMMENT +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -226,6 +226,13 @@ IGRID=0 ILENCH=LEN(YCOMMENT) CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',NKMAX,IGRID,ILENCH,YCOMMENT,IRESP) ! +YRECFM='JPHEXT' +!CALL ELIM(YRECFM) +YCOMMENT=' ' +IGRID=0 +ILENCH=LEN(YCOMMENT) +CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) +! !* 1.2 Grid variables : ! IF (.NOT.LCARTESIAN) THEN diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index 051f3e5bd..a4026bf57 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -156,6 +156,7 @@ END MODULE MODI_WRITE_LFIFM_n !! J.escobar & M.Leriche 23/06/2014 Pb with JSA increment versus ini_nsv order initialization !! P. Tulet Nov 2014 accumulated moles of aqueous species that fall at the surface !! C.Lac Dec.2014 writing past wind fields for centred advection +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! @@ -310,11 +311,8 @@ ALLOCATE(ZWORK3D(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))) IIU=NIMAX+2*JPHEXT IJU=NJMAX+2*JPHEXT IKU=NKMAX+2*JPVEXT -IIB=1+JPHEXT -IJB=1+JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT -IIE=IIU-JPHEXT -IJE=IJU-JPHEXT IKE=IKU-JPVEXT ! !* 1. WRITES IN THE LFI FILE @@ -388,6 +386,12 @@ IGRID=0 ILENCH=LEN(YCOMMENT) CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,NJMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP) ! +YRECFM='JPHEXT' +YCOMMENT=' ' +IGRID=0 +ILENCH=LEN(YCOMMENT) +CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) +! YRECFM='KMAX' YCOMMENT=' ' IGRID=0 @@ -476,6 +480,9 @@ IGRID=3 ILENCH=LEN(YCOMMENT) CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XYHAT,IGRID,ILENCH,YCOMMENT,IRESP) ! +!print*,'XXHAT=',XXHAT +!print*,'XYHAT=',XYHAT +!print*,'XZHAT=',XZHAT YRECFM='ZHAT' YDIR='--' YCOMMENT='height level without orography (METERS)' diff --git a/src/MNH/write_seriesn.f90 b/src/MNH/write_seriesn.f90 index 20c71e0f5..d2c5ac3a6 100644 --- a/src/MNH/write_seriesn.f90 +++ b/src/MNH/write_seriesn.f90 @@ -6,9 +6,8 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! MASDEV4_7 series 2006/05/18 13:07:25 !----------------------------------------------------------------- -! ################### +!######################## MODULE MODI_WRITE_SERIES_n !######################## ! @@ -59,6 +58,7 @@ END MODULE MODI_WRITE_SERIES_n !! ------------- !! Original 4/03/2002 !! Modification 7/01/2013 Add key for netcdf writing +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90 index 70d98d25d..2606414da 100644 --- a/src/MNH/write_surf_mnh.f90 +++ b/src/MNH/write_surf_mnh.f90 @@ -6,7 +6,6 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:30 !----------------------------------------------------------------- ! ############################################################# SUBROUTINE WRITE_SURFX0_MNH(HREC,PFIELD,KRESP,HCOMMENT) @@ -48,6 +47,7 @@ !! YY, XY, DX, DY in 1D or 2D configuration !! 03/09, G.Tanguy : add write_surft1_mnh !! replace ZUNDEF(surfex) by XUNDEF(MNH) +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !---------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -747,6 +747,8 @@ USE MODD_CONF_n, ONLY : CSTORAGE_TYPE ! USE MODI_UNPACK_1D_2D ! +USE MODD_PARAMETERS, ONLY : JPHEXT +! IMPLICIT NONE ! !* 0.1 Declarations of arguments @@ -775,8 +777,8 @@ IF( (HREC=='IMAX' .OR. HREC=='JMAX' .OR. HREC=='KMAX') .AND. & ! ELSE IFIELD = KFIELD - IF (HREC=='IMAX') IFIELD = NIU_ALL-2 - IF (HREC=='JMAX') IFIELD = NJU_ALL-2 + IF (HREC=='IMAX') IFIELD = NIU_ALL-2*JPHEXT + IF (HREC=='JMAX') IFIELD = NJU_ALL-2*JPHEXT CALL FMWRIT(COUTFILE,HREC,COUT,'--',IFIELD,0,LEN(HCOMMENT),HCOMMENT,KRESP) IF (KRESP /=0) THEN diff --git a/src/MNH/zsect.f90 b/src/MNH/zsect.f90 index 5a07aeabd..39367d92d 100644 --- a/src/MNH/zsect.f90 +++ b/src/MNH/zsect.f90 @@ -62,6 +62,7 @@ END MODULE MODI_ZSECT !! ------------- !! Original 08/12/94 !! J. Escobar 24/03/2012 modif for reprod sum +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -102,10 +103,7 @@ INTEGER :: IINFO_ll !* 1. Determination of the inner points of the horizontal domain ! ---------------------------------------------------------- ! -IIB=JPHEXT+1 -IIE=SIZE(PVAR,1)-JPHEXT -IJB=JPHEXT+1 -IJE=SIZE(PVAR,2)-JPHEXT +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) GMASK2D=RESHAPE((/ ((JI>=IIB.AND.JI<=IIE.AND.JJ>=IJB.AND.JJ<=IJE & ,JI=1,SIZE(PVAR,1)),JJ=1,SIZE(PVAR,2)) /), & (/ SIZE(PVAR,1),SIZE(PVAR,2) /) ) diff --git a/src/MNH/zsmt_pgd.f90 b/src/MNH/zsmt_pgd.f90 index a1f812e5c..da0fe8521 100644 --- a/src/MNH/zsmt_pgd.f90 +++ b/src/MNH/zsmt_pgd.f90 @@ -53,6 +53,7 @@ END MODULE MODI_ZSMT_PGD !! MODIFICATIONS !! ------------- !! Original nov 2005 +!! J.Escobar 23/06/2015 : correction for JPHEXT<>1 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -103,6 +104,7 @@ INTEGER :: JIM, JIP, JJM, JJP TYPE(LIST_ll) , POINTER :: THALO_ll => NULL() ! halo INTEGER :: INFO_ll ! error return code +INTEGER :: IIB,IIE,IJB,IJE !------------------------------------------------------------------------------- ! !* 1. Read orography in the file @@ -112,6 +114,7 @@ INTEGER :: INFO_ll ! error return code ! ---------- ! CALL GET_DIM_EXT_ll('B',IIU,IJU) +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! ! !* 1.2 orography @@ -126,20 +129,24 @@ ALLOCATE(ZMASK(IIU,IJU)) YRECFM = 'ZS ' CALL FMREAD(HFILE,YRECFM,CLUOUT0,'XY',ZZS,IGRID,ILENCH,YCOMMENT,IRESP) ! -ZZS(1 ,:) = ZZS(2 ,:) -ZZS(IIU,:) = ZZS(IIU-1,:) -ZZS(:,1 ) = ZZS(:,2 ) -ZZS(:,IJU) = ZZS(:,IJU-1) +DO JI=1,JPHEXT +ZZS(JI,:) = ZZS(IIB,:) +ZZS(IIE+JI,:) = ZZS(IIE,:) +ZZS(:,JI ) = ZZS(:,IJB) +ZZS(:,IJE+JI) = ZZS(:,IJE) +ENDDO ! ZFINE_ZS = ZZS ZSLEVE_ZS= ZZS ! CALL MNHGET_SURF_PARAM_n(PSEA=ZMASK) ! -ZMASK(1 ,:) = ZMASK(2 ,:) -ZMASK(IIU,:) = ZMASK(IIU-1,:) -ZMASK(:,1 ) = ZMASK(:,2 ) -ZMASK(:,IJU) = ZMASK(:,IJU-1) +DO JI=1,JPHEXT +ZMASK(JI ,:) = ZMASK(IIB,:) +ZMASK(IIE+JI,:) = ZMASK(IIE,:) +ZMASK(:,JI ) = ZMASK(:,IJB) +ZMASK(:,IJE+JI) = ZMASK(:,IJE) +ENDDO ! ZMASK= 1.-ZMASK CALL ADD2DFIELD_ll(THALO_ll,ZMASK) @@ -161,12 +168,12 @@ CALL UPDATE_HALO_ll(THALO_ll,INFO_ll) DO JN = 1,MAX(KSLEVE,KZSFILTER) ! - DO JJ = 1,IJU - DO JI = 1,IIU - JIP = MIN(JI+1,IIU) - JIM = MAX(JI-1,1 ) - JJP = MIN(JJ+1,IJU) - JJM = MAX(JJ-1,1 ) + DO JJ = IJB-1,IJE+1 + DO JI = IIB-1,IIE+1 + JIP = MIN(JI+1,IIE+1) + JIM = MAX(JI-1,IIB-1 ) + JJP = MIN(JJ+1,IJE+1) + JJM = MAX(JJ-1,IJB-1 ) ZSMOOTH_ZS(JI,JJ) = ZZS(JI,JJ) & + 0.125* ZMASK(JI,JJ) & * ( ZMASK(JIM,JJ) * ZZS(JIM,JJ) & -- GitLab