Salvatore Filippone
25d97dbada
*** empty log message ***
13 years ago
Salvatore Filippone
a9f8803dcc
*** empty log message ***
13 years ago
Salvatore Filippone
50eb8ab2d6
mld2p4-2:
...
mlprec/mld_base_prec_type.F90
mlprec/mld_d_move_alloc_mod.f90
mlprec/mld_d_prec_type.f90
Comments in D_PREC_TYPE documenting the internals.
It's a start...
13 years ago
Salvatore Filippone
312399f694
mld2p4-2:
...
mlprec/Makefile
Fix dependencies for make -j N.
13 years ago
Salvatore Filippone
c3345672be
*** empty log message ***
13 years ago
Alfredo Buttari
65f23310af
generated s, z, c versions
13 years ago
Salvatore Filippone
6b010b19ab
mld2p4-2:
...
mlprec/mld_base_prec_type.F90
mlprec/mld_c_id_solver.f90
mlprec/mld_d_as_smoother.f90
mlprec/mld_d_diag_solver.f90
mlprec/mld_d_id_solver.f90
mlprec/mld_d_ilu_fact_mod.f90
mlprec/mld_d_ilu_solver.f90
mlprec/mld_d_jac_smoother.f90
mlprec/mld_dilut_fact.f90
mlprec/mld_s_id_solver.f90
mlprec/mld_z_id_solver.f90
Integrate mods developed originally for mld-ainv
13 years ago
Salvatore Filippone
41d1022114
mld2p4-2:
...
mlprec/mld_dmlprec_aply.f90
tests/pdegen/runs/ppde.inp
use new geasb(scratch=.true.)
13 years ago
Salvatore Filippone
614df09a94
mld2p4-2:
...
ppde.f90
spde.f90
Update spde test case.
13 years ago
Salvatore Filippone
39c9c9be16
*** empty log message ***
13 years ago
Salvatore Filippone
a78c31ee8f
mld2p4-2:
...
mld_c_inner_mod.f90
mld_ccoarse_bld.f90
mld_d_inner_mod.f90
mld_dcoarse_bld.f90
mld_scoarse_bld.f90
mld_z_inner_mod.f90
mld_zcoarse_bld.f90
Various interface fixes from tests with Cray FTN.
13 years ago
Salvatore Filippone
6d8b6d5f06
*** empty log message ***
13 years ago
Salvatore Filippone
8469715de9
*** empty log message ***
13 years ago
Salvatore Filippone
d7cf6c0a21
*** empty log message ***
13 years ago
Salvatore Filippone
fe78b93c76
Fix name import.
13 years ago
Salvatore Filippone
b1c849653a
mld2p4-2:
...
mlprec/mld_d_ilu_solver.f90
mlprec/mld_d_jac_smoother.f90
mlprec/mld_dmlprec_aply.f90
tests/pdegen/runs/ppde.inp
Fix for performace issues related to _Vect.
13 years ago
Salvatore Filippone
aa674f69ef
mld2p4-2:
...
mlprec/mld_daggrmat_minnrg_asb.F90
Fixed minenergy. To be replicated to other versions.
TBD: cleanup, "style" uniformity of aggrmat_asb routines.
13 years ago
Salvatore Filippone
10961f823f
*** empty log message ***
13 years ago
Salvatore Filippone
50c23a69a5
mld2p4
...
Fixed TRANSP.
Also reworked minnrg, not fully debugged yet.
13 years ago
Salvatore Filippone
dcd48aad7e
*** empty log message ***
13 years ago
Salvatore Filippone
08f013aac9
mld2p4:
...
mlprec/mld_caggrmat_smth_asb.F90
mlprec/mld_d_as_smoother.f90
mlprec/mld_d_ilu_solver.f90
mlprec/mld_d_inner_mod.f90
mlprec/mld_d_jac_smoother.f90
mlprec/mld_daggrmat_minnrg_asb.F90
mlprec/mld_daggrmat_smth_asb.F90
mlprec/mld_dmlprec_aply.f90
mlprec/mld_dmlprec_bld.f90
mlprec/mld_dprecaply.f90
mlprec/mld_saggrmat_smth_asb.F90
mlprec/mld_zaggrmat_smth_asb.F90
tests/pdegen/ppde.f90
tests/pdegen/runs/ppde.inp
D: work on VECT/MAT version. Updated test program.
Initial version of MINNRGY, to be tested.
13 years ago
Salvatore Filippone
859ba30c4c
mld2p4-2:
...
mlprec/mld_d_as_smoother.f90
mlprec/mld_d_diag_solver.f90
mlprec/mld_d_id_solver.f90
mlprec/mld_d_ilu_solver.f90
mlprec/mld_d_inner_mod.f90
mlprec/mld_d_jac_smoother.f90
mlprec/mld_d_prec_mod.f90
mlprec/mld_d_prec_type.f90
mlprec/mld_d_slu_solver.f90
mlprec/mld_d_sludist_solver.f90
mlprec/mld_d_umf_solver.f90
mlprec/mld_dmlprec_bld.f90
mlprec/mld_dprecaply.f90
mlprec/mld_dprecbld.f90
Started inclusion of _vect methods.
13 years ago
Salvatore Filippone
05a910d78e
mld2p4-2:
...
13 years ago
Salvatore Filippone
7c555b3352
mld2p4-2:
...
examples/pdegen/mld_dexample_1lev.f90
examples/pdegen/mld_dexample_ml.f90
examples/pdegen/mld_sexample_1lev.f90
examples/pdegen/mld_sexample_ml.f90
tests/newslv/ppde.f90
tests/newslv/spde.f90
tests/pdegen/ppde.f90
tests/pdegen/spde.f90
Fixed examples.
13 years ago
Salvatore Filippone
79cb0731c4
mld2p4-2:
...
tests/pdegen/Makefile
tests/pdegen/ppde.f90
tests/pdegen/spde.f90
Fixed test generation. Tested with new psblas, compatibility mode works.
13 years ago
Salvatore Filippone
1440f1c41f
mld2p4-2:
...
mlprec/mld_c_as_smoother.f90
mlprec/mld_c_dec_map_bld.F90
mlprec/mld_c_diag_solver.f90
mlprec/mld_c_id_solver.f90
mlprec/mld_c_ilu_solver.f90
mlprec/mld_c_jac_smoother.f90
mlprec/mld_c_prec_type.f90
mlprec/mld_c_slu_solver.f90
mlprec/mld_caggrmap_bld.f90
mlprec/mld_caggrmat_asb.f90
mlprec/mld_caggrmat_nosmth_asb.F90
mlprec/mld_caggrmat_smth_asb.F90
mlprec/mld_ccoarse_bld.f90
mlprec/mld_cmlprec_aply.f90
mlprec/mld_cmlprec_bld.f90
mlprec/mld_cprecaply.f90
mlprec/mld_cprecbld.f90
mlprec/mld_cslu_bld.f90
mlprec/mld_cslud_bld.f90
mlprec/mld_csp_renum.f90
mlprec/mld_cumf_bld.f90
mlprec/mld_d_as_smoother.f90
mlprec/mld_d_dec_map_bld.F90
mlprec/mld_d_diag_solver.f90
mlprec/mld_d_id_solver.f90
mlprec/mld_d_ilu_solver.f90
mlprec/mld_d_jac_smoother.f90
mlprec/mld_d_prec_type.f90
mlprec/mld_d_slu_solver.f90
mlprec/mld_d_sludist_solver.f90
mlprec/mld_d_umf_solver.f90
mlprec/mld_daggrmap_bld.f90
mlprec/mld_daggrmat_asb.f90
mlprec/mld_daggrmat_minnrg_asb.F90
mlprec/mld_daggrmat_nosmth_asb.F90
mlprec/mld_daggrmat_smth_asb.F90
mlprec/mld_dcoarse_bld.f90
mlprec/mld_dmlprec_aply.f90
mlprec/mld_dmlprec_bld.f90
mlprec/mld_dprecaply.f90
mlprec/mld_dprecbld.f90
mlprec/mld_dslu_bld.f90
mlprec/mld_dslud_bld.f90
mlprec/mld_dsp_renum.f90
mlprec/mld_s_as_smoother.f90
mlprec/mld_s_dec_map_bld.F90
mlprec/mld_s_diag_solver.f90
mlprec/mld_s_id_solver.f90
mlprec/mld_s_ilu_solver.f90
mlprec/mld_s_jac_smoother.f90
mlprec/mld_s_prec_type.f90
mlprec/mld_s_slu_solver.f90
mlprec/mld_saggrmap_bld.f90
mlprec/mld_saggrmat_asb.f90
mlprec/mld_saggrmat_nosmth_asb.F90
mlprec/mld_saggrmat_smth_asb.F90
mlprec/mld_scoarse_bld.f90
mlprec/mld_smlprec_aply.f90
mlprec/mld_smlprec_bld.f90
mlprec/mld_sprecaply.f90
mlprec/mld_sprecbld.f90
mlprec/mld_sslu_bld.f90
mlprec/mld_sslud_bld.f90
mlprec/mld_ssp_renum.f90
mlprec/mld_sumf_bld.f90
mlprec/mld_z_as_smoother.f90
mlprec/mld_z_dec_map_bld.F90
mlprec/mld_z_diag_solver.f90
mlprec/mld_z_id_solver.f90
mlprec/mld_z_ilu_solver.f90
mlprec/mld_z_jac_smoother.f90
mlprec/mld_z_prec_type.f90
mlprec/mld_z_slu_solver.f90
mlprec/mld_z_umf_solver.f90
mlprec/mld_zaggrmap_bld.f90
mlprec/mld_zaggrmat_asb.f90
mlprec/mld_zaggrmat_nosmth_asb.F90
mlprec/mld_zaggrmat_smth_asb.F90
mlprec/mld_zas_aply.f90
mlprec/mld_zas_bld.f90
mlprec/mld_zbaseprec_aply.f90
mlprec/mld_zbaseprec_bld.f90
mlprec/mld_zcoarse_bld.f90
mlprec/mld_zdiag_bld.f90
mlprec/mld_zfact_bld.f90
mlprec/mld_zilu_bld.f90
mlprec/mld_zmlprec_aply.f90
mlprec/mld_zmlprec_bld.f90
mlprec/mld_zprecaply.f90
mlprec/mld_zprecbld.f90
mlprec/mld_zslu_bld.f90
mlprec/mld_zslud_bld.f90
mlprec/mld_zsp_renum.f90
mlprec/mld_zumf_bld.f90
tests/pdegen/ppde.f90
tests/pdegen/runs/ppde.inp
Worked out new interfaces for DESC methods.
14 years ago
Salvatore Filippone
f986cf585e
mld2p4-2:
...
mlprec/mld_cmlprec_aply.f90
mlprec/mld_dmlprec_aply.f90
mlprec/mld_smlprec_aply.f90
mlprec/mld_zmlprec_aply.f90
Fix description of algorithms.
14 years ago
Salvatore Filippone
e3d7a95d53
mld2p4-2:
...
mlprec/mld_c_prec_type.f90
mlprec/mld_d_prec_type.f90
mlprec/mld_s_prec_type.f90
mlprec/mld_z_prec_type.f90
Defined dump of prolongator/restrictor.
14 years ago
Salvatore Filippone
7fa413283e
mld2p4-2:
...
mlprec/Makefile
mlprec/mld_c_dec_map_bld.F90
mlprec/mld_c_inner_mod.f90
mlprec/mld_caggrmap_bld.f90
mlprec/mld_d_dec_map_bld.F90
mlprec/mld_d_ilu_solver.f90
mlprec/mld_d_inner_mod.f90
mlprec/mld_daggrmap_bld.f90
mlprec/mld_s_dec_map_bld.F90
mlprec/mld_s_inner_mod.f90
mlprec/mld_saggrmap_bld.f90
mlprec/mld_z_dec_map_bld.F90
mlprec/mld_z_inner_mod.f90
mlprec/mld_zaggrmap_bld.f90
Separate the decmap_bld from its wrapper, make room for alternatives.
14 years ago
Salvatore Filippone
1f91926ff4
mld2p4-2:
...
mlprec/mld_silut_fact.f90
Silly bug: calling DNRM2 on real data!
14 years ago
Salvatore Filippone
10e48562a4
mld2p4-2:
...
mld_cprecset.F90
mld_dprecset.F90
mld_sprecset.F90
mld_zprecset.F90
Fixed handling of set sub_solve for ILU variants.
14 years ago
Michele Martone
338dda1762
mld2p4:
...
if compiling with rsb and uncommenting an #undef, rsb will override the input-specified matrix format.
14 years ago
Michele Martone
9abef29e36
mld2p4-trunk:
...
for the previous commit:
fileread/df_sample.f90 -> fileread/df_sample.F90
beginning to integrate rsb in df_sample (unfinished).
14 years ago
Salvatore Filippone
055664826d
mld2p4-2:
...
14 years ago
Michele Martone
453003f5f6
mld2p4:
...
fixing the makefiles so `make check` and `make` execute with no extra copies/compilation/archiving.
14 years ago
Michele Martone
1dcfbd403f
mld2p4-2:
...
will install Make.inc as Make.inc.MLD2P4, to allow sharing the same install dir as PSBLAS.
14 years ago
Salvatore Filippone
e2b2a202c0
Fixed C include file and its generation.
14 years ago
Salvatore Filippone
905b5f72cf
mld2p4-2:
...
examples/fileread/Makefile
examples/fileread/mld_cexample_1lev.f90
examples/fileread/mld_cexample_ml.f90
examples/fileread/mld_dexample_1lev.f90
examples/fileread/mld_dexample_ml.f90
examples/fileread/mld_sexample_1lev.f90
examples/fileread/mld_sexample_ml.f90
examples/fileread/mld_zexample_1lev.f90
examples/fileread/mld_zexample_ml.f90
examples/fileread/runs/1lev.inp
examples/fileread/runs/ml.inp
examples/pdegen/Makefile
examples/pdegen/mld_dexample_1lev.f90
examples/pdegen/mld_dexample_ml.f90
examples/pdegen/mld_sexample_1lev.f90
examples/pdegen/mld_sexample_ml.f90
examples/pdegen/runs/1lev.inp
examples/pdegen/runs/ml.inp
Fix example programs.
14 years ago
Salvatore Filippone
eed800dbb4
mld2p4-2:
...
README
mlprec/mld_base_prec_type.F90
mlprec/mld_c_prec_type.f90
mlprec/mld_cprecbld.f90
mlprec/mld_d_prec_type.f90
mlprec/mld_dprecbld.f90
mlprec/mld_dprecinit.F90
mlprec/mld_s_prec_type.f90
mlprec/mld_sprecbld.f90
mlprec/mld_z_prec_type.f90
mlprec/mld_zprecbld.f90
mlprec/mld_zprecinit.F90
tests/pdegen/ppde.f90
tests/pdegen/runs/ppde.inp
tests/pdegen/spde.f90
Fixes for printout of description, plus computing operator
complexity.
14 years ago
Salvatore Filippone
8e4c0c99fd
mld2p4-2:
...
mlprec/mld_cprecinit.F90
mlprec/mld_cprecset.F90
mlprec/mld_dprecinit.F90
mlprec/mld_dprecset.F90
mlprec/mld_sprecinit.F90
mlprec/mld_sprecset.F90
mlprec/mld_zprecinit.F90
mlprec/mld_zprecset.F90
Merged fixes for aggregation threshold settings.
14 years ago
Salvatore Filippone
953ee272ea
mld2p4-2:
...
Add rule to copy mld_const.h
14 years ago
Michele Martone
e922dce38b
mld2p4-2:
...
MLD's constants are back authoritative in the .F90 file.
the .h file is a slave one: built from the .F90.
in a script for the (by hand, no Makefile rule for now) conversion.
14 years ago
Michele Martone
69a7fc4208
mld2p4-2:
...
created a header file with symbolic constants and using them instead of the fortran constants.
cat mld_base_prec_type.F90 | while read ; do
if [[ "$REPLY" =~ 'parameter ::' ]]; then
UC=`echo "$REPLY" | sed "s/.*\(mld[a-z_0-9]*_\>\) *=.*$/\1/g" | perl -e "while(<>){print(uc($_));};"`
echo "$REPLY" | sed "s/\(.*\)\(mld[a-z_0-9]*_\> *=\).*$/\1\2 $UC/g"
else echo "$REPLY" ; fi ; done > tmpfile ; mv tmpfile mld_base_prec_type.F90
hn=mld_const.h
echo '' > $hn
echo '#ifdef __cplusplus' >> $hn
echo 'extern "C" { ' >> $hn
echo '#endif' >> $hn
cat mld_base_prec_type.F90 | grep '\(^ *!\)\|parameter' | grep '_\>' | sed 's/^\s*//g;s/^.*:://g;s/\s*=\s*/ /g' | sed 's/,
/\n/g;s/^ //g' | perl -e "while(<>){print(uc($_));};" | grep ^MLD | sed 's/^/#define /g' >> $hn
#cat mld_base_prec_type.F90 | sed 's/\( parameter *:: *\)\(\<[a-z0-9_]*\>\) *=.*$/\1\2 = \2 UPPP/g'
echo '#ifdef __cplusplus' >> $hn
echo '}' >> $hn
echo '#endif' >> $hn
14 years ago
Michele Martone
c52848be03
mld2p4-2:
...
in mlprec/mld_base_prec_type.F90, only one public constant per line.
14 years ago
Michele Martone
70cd5e1075
mld2p4-2:
...
mlprec/mld_base_prec_type.f90 -> mlprec/mld_base_prec_type.F90
14 years ago
Salvatore Filippone
cd593602a5
mld2p4-2:
...
Welcome message
14 years ago
Salvatore Filippone
0288cf909a
mld2p4-2:
...
Version number string & docs.
14 years ago
Michele Martone
1a43c78bf1
mld2p4-2:
...
Updated to use psb_sparse_mod also some .m4, .tex, configure file.
14 years ago
Salvatore Filippone
5fc55bfc4c
mld2p4-2:
...
configure
examples/fileread/data_input.f90
examples/fileread/mld_cexample_1lev.f90
examples/fileread/mld_cexample_ml.f90
examples/fileread/mld_dexample_1lev.f90
examples/fileread/mld_dexample_ml.f90
examples/fileread/mld_sexample_1lev.f90
examples/fileread/mld_sexample_ml.f90
examples/fileread/mld_zexample_1lev.f90
examples/fileread/mld_zexample_ml.f90
examples/pdegen/data_input.f90
examples/pdegen/mld_dexample_1lev.f90
examples/pdegen/mld_dexample_ml.f90
examples/pdegen/mld_sexample_1lev.f90
examples/pdegen/mld_sexample_ml.f90
mlprec/Makefile
mlprec/mld_base_prec_type.f90
mlprec/mld_c_as_smoother.f90
mlprec/mld_c_diag_solver.f90
mlprec/mld_c_id_solver.f90
mlprec/mld_c_ilu_solver.f90
mlprec/mld_c_inner_mod.f90
mlprec/mld_c_jac_smoother.f90
mlprec/mld_c_move_alloc_mod.f90
mlprec/mld_c_prec_mod.f90
mlprec/mld_c_prec_type.f90
mlprec/mld_c_slu_solver.f90
mlprec/mld_caggrmap_bld.f90
mlprec/mld_caggrmat_asb.f90
mlprec/mld_caggrmat_nosmth_asb.F90
mlprec/mld_caggrmat_smth_asb.F90
mlprec/mld_ccoarse_bld.f90
mlprec/mld_cilu0_fact.f90
mlprec/mld_ciluk_fact.f90
mlprec/mld_cilut_fact.f90
mlprec/mld_cmlprec_aply.f90
mlprec/mld_cmlprec_bld.f90
mlprec/mld_cprecaply.f90
mlprec/mld_cprecbld.f90
mlprec/mld_cprecinit.F90
mlprec/mld_cprecset.F90
mlprec/mld_cslu_bld.f90
mlprec/mld_cslud_bld.f90
mlprec/mld_csp_renum.f90
mlprec/mld_cumf_bld.f90
mlprec/mld_d_as_smoother.f90
mlprec/mld_d_diag_solver.f90
mlprec/mld_d_id_solver.f90
mlprec/mld_d_ilu_solver.f90
mlprec/mld_d_inner_mod.f90
mlprec/mld_d_jac_smoother.f90
mlprec/mld_d_move_alloc_mod.f90
mlprec/mld_d_prec_mod.f90
mlprec/mld_d_prec_type.f90
mlprec/mld_d_slu_solver.f90
mlprec/mld_d_sludist_solver.f90
mlprec/mld_d_umf_solver.f90
mlprec/mld_daggrmap_bld.f90
mlprec/mld_daggrmat_asb.f90
mlprec/mld_daggrmat_minnrg_asb.F90
mlprec/mld_daggrmat_nosmth_asb.F90
mlprec/mld_daggrmat_smth_asb.F90
mlprec/mld_dcoarse_bld.f90
mlprec/mld_dilu0_fact.f90
mlprec/mld_diluk_fact.f90
mlprec/mld_dilut_fact.f90
mlprec/mld_dmlprec_aply.f90
mlprec/mld_dmlprec_bld.f90
mlprec/mld_dprecaply.f90
mlprec/mld_dprecbld.f90
mlprec/mld_dprecinit.F90
mlprec/mld_dprecset.F90
mlprec/mld_dslu_bld.f90
mlprec/mld_dslud_bld.f90
mlprec/mld_dsp_renum.f90
mlprec/mld_s_as_smoother.f90
mlprec/mld_s_diag_solver.f90
mlprec/mld_s_id_solver.f90
mlprec/mld_s_ilu_solver.f90
mlprec/mld_s_inner_mod.f90
mlprec/mld_s_jac_smoother.f90
mlprec/mld_s_move_alloc_mod.f90
mlprec/mld_s_prec_mod.f90
mlprec/mld_s_prec_type.f90
mlprec/mld_s_slu_solver.f90
mlprec/mld_saggrmap_bld.f90
mlprec/mld_saggrmat_asb.f90
mlprec/mld_saggrmat_nosmth_asb.F90
mlprec/mld_saggrmat_smth_asb.F90
mlprec/mld_scoarse_bld.f90
mlprec/mld_silu0_fact.f90
mlprec/mld_siluk_fact.f90
mlprec/mld_silut_fact.f90
mlprec/mld_smlprec_aply.f90
mlprec/mld_smlprec_bld.f90
mlprec/mld_sprecaply.f90
mlprec/mld_sprecbld.f90
mlprec/mld_sprecinit.F90
mlprec/mld_sprecset.F90
mlprec/mld_sslu_bld.f90
mlprec/mld_sslud_bld.f90
mlprec/mld_ssp_renum.f90
mlprec/mld_sumf_bld.f90
mlprec/mld_z_as_smoother.f90
mlprec/mld_z_diag_solver.f90
mlprec/mld_z_id_solver.f90
mlprec/mld_z_ilu_solver.f90
mlprec/mld_z_inner_mod.f90
mlprec/mld_z_jac_smoother.f90
mlprec/mld_z_move_alloc_mod.f90
mlprec/mld_z_prec_mod.f90
mlprec/mld_z_prec_type.f90
mlprec/mld_z_slu_solver.f90
mlprec/mld_z_umf_solver.f90
mlprec/mld_zaggrmap_bld.f90
mlprec/mld_zaggrmat_asb.f90
mlprec/mld_zaggrmat_nosmth_asb.F90
mlprec/mld_zaggrmat_smth_asb.F90
mlprec/mld_zas_aply.f90
mlprec/mld_zas_bld.f90
mlprec/mld_zbaseprec_aply.f90
mlprec/mld_zbaseprec_bld.f90
mlprec/mld_zcoarse_bld.f90
mlprec/mld_zdiag_bld.f90
mlprec/mld_zfact_bld.f90
mlprec/mld_zilu0_fact.f90
mlprec/mld_zilu_bld.f90
mlprec/mld_ziluk_fact.f90
mlprec/mld_zilut_fact.f90
mlprec/mld_zmlprec_aply.f90
mlprec/mld_zmlprec_bld.f90
mlprec/mld_zprecaply.f90
mlprec/mld_zprecbld.f90
mlprec/mld_zprecinit.F90
mlprec/mld_zprecset.F90
mlprec/mld_zslu_bld.f90
mlprec/mld_zslud_bld.f90
mlprec/mld_zsp_renum.f90
mlprec/mld_zumf_bld.f90
tests/fileread/cf_sample.f90
tests/fileread/data_input.f90
tests/fileread/df_sample.f90
tests/fileread/sf_sample.f90
tests/fileread/zf_sample.f90
tests/newslv/data_input.f90
tests/newslv/mld_d_tlu_solver.f90
tests/newslv/ppde.f90
tests/newslv/spde.f90
tests/pdegen/data_input.f90
tests/pdegen/ppde.f90
tests/pdegen/runs/ppde.inp
tests/pdegen/spde.f90
Adapted psb_base_mod.
14 years ago
Salvatore Filippone
53d6992dea
Fixed stupid typo.
14 years ago