Ignore:
Timestamp:
06/17/19 16:32:14 (5 years ago)
Author:
aquiquet
Message:

Mass conservation in double precision to deal with short timesteps

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SOURCES/resol_adv_diff_2D-sept2009.f90

    r224 r261  
    1818 
    1919implicit none 
    20 real :: omega   !< parametre schema temporel de la resolution partie diffusion 
    21 real :: mu_adv  !< parametre schema temporel de la resolution advection 
    22 real :: upwind  !< schema spatial pour l'advection 
     20double precision :: omega   !< parametre schema temporel de la resolution partie diffusion 
     21double precision :: mu_adv  !< parametre schema temporel de la resolution advection 
     22double precision :: upwind  !< schema spatial pour l'advection 
    2323 
    2424! tableaux de travail. resolution M H = Frelax 
    25 real,dimension(nx,ny) :: crelax      !< diagnonale de M 
    26 real,dimension(nx,ny) :: arelax      !< sous diagonale selon x 
    27 real,dimension(nx,ny) :: brelax      !< sur diagonale selon x 
    28 real,dimension(nx,ny) :: drelax      !< sous diagonale selon y 
    29 real,dimension(nx,ny) :: erelax      !< sur diagonale selon y 
    30 real,dimension(nx,ny) :: frelax      !< vecteur 
    31 real,dimension(nx,ny) :: c_west      !< sur demi mailles Ux 
    32 real,dimension(nx,ny) :: c_east      !< sur demi mailles Ux 
    33 real,dimension(nx,ny) :: c_north     !< sur demi mailles Uy 
    34 real,dimension(nx,ny) :: c_south     !< sur demi mailles Uy 
    35  
    36 real,dimension(nx,ny) :: bdx         !< pente socle 
    37 real,dimension(nx,ny) :: bdy         !< pente socle 
    38  
    39 real,dimension(nx,ny) :: hdx         !< pente epaisseur 
    40 real,dimension(nx,ny) :: hdy         !< pente epaisseur 
     25double precision,dimension(nx,ny) :: crelax      !< diagnonale de M 
     26double precision,dimension(nx,ny) :: arelax      !< sous diagonale selon x 
     27double precision,dimension(nx,ny) :: brelax      !< sur diagonale selon x 
     28double precision,dimension(nx,ny) :: drelax      !< sous diagonale selon y 
     29double precision,dimension(nx,ny) :: erelax      !< sur diagonale selon y 
     30double precision,dimension(nx,ny) :: frelax      !< vecteur 
     31double precision,dimension(nx,ny) :: c_west      !< sur demi mailles Ux 
     32double precision,dimension(nx,ny) :: c_east      !< sur demi mailles Ux 
     33double precision,dimension(nx,ny) :: c_north     !< sur demi mailles Uy 
     34double precision,dimension(nx,ny) :: c_south     !< sur demi mailles Uy 
     35 
     36double precision,dimension(nx,ny) :: bdx         !< pente socle 
     37double precision,dimension(nx,ny) :: bdy         !< pente socle 
     38 
     39double precision,dimension(nx,ny) :: hdx         !< pente epaisseur 
     40double precision,dimension(nx,ny) :: hdy         !< pente epaisseur 
    4141 
    4242 
     
    9595implicit none 
    9696 
    97 real,dimension(nx,ny), intent(in) :: Dfx          !< terme diffusif selon x 
    98 real,dimension(nx,ny), intent(in) :: Dfy          !< terme diffusif selon y 
    99 real,dimension(nx,ny), intent(in) :: Advx         !< terme advectif selon x 
    100 real,dimension(nx,ny), intent(in) :: Advy         !< terme advectif selon y 
    101 real,dimension(nx,ny), intent(in) :: vieuxH       !< ancienne valeur de H 
    102 real,dimension(nx,ny), intent(out):: newH         !< nouvelle valeur de H 
    103  
    104 real,dimension(nx,ny), intent(in) :: bil          !< bilan de masse pour la colonne 
    105  
    106 real,dimension(nx,ny), intent(in) :: H_presc      !< H value if prescribed 
     97double precision,dimension(nx,ny), intent(in) :: Dfx          !< terme diffusif selon x 
     98double precision,dimension(nx,ny), intent(in) :: Dfy          !< terme diffusif selon y 
     99double precision,dimension(nx,ny), intent(in) :: Advx         !< terme advectif selon x 
     100double precision,dimension(nx,ny), intent(in) :: Advy         !< terme advectif selon y 
     101double precision,dimension(nx,ny), intent(in) :: vieuxH       !< ancienne valeur de H 
     102double precision,dimension(nx,ny), intent(out):: newH         !< nouvelle valeur de H 
     103 
     104double precision,dimension(nx,ny), intent(in) :: bil          !< bilan de masse pour la colonne 
     105 
     106double precision,dimension(nx,ny), intent(in) :: H_presc      !< H value if prescribed 
    107107integer,dimension(nx,ny), intent(in) :: i_Hpresc  !< 1 if H is prescribed on this node, else 0 
    108108 
     
    126126!!$real,dimension(nx,ny) :: hdy         !< pente epaisseur 
    127127 
    128 real :: frdx,frdy                    !< pour calcul frelax : termes diffusion 
    129 real :: fraxw,fraxe,frays,frayn      !< termes advection 
    130  
    131 real,dimension(nx,ny) :: deltah      ! dans calcul relax 
    132 real :: delh                         ! dans calcul relax 
    133 real :: testh                        ! dans calcul relax 
     128double precision :: frdx,frdy                    !< pour calcul frelax : termes diffusion 
     129double precision :: fraxw,fraxe,frays,frayn      !< termes advection 
     130 
     131double precision,dimension(nx,ny) :: deltah      ! dans calcul relax 
     132double precision :: delh                         ! dans calcul relax 
     133double precision :: testh                        ! dans calcul relax 
    134134 
    135135logical :: stopp 
    136136integer :: ntour 
    137 real :: reste 
     137double precision :: reste 
    138138 
    139139 
Note: See TracChangeset for help on using the changeset viewer.