Changeset 261


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

Mass conservation in double precision to deal with short timesteps

Location:
trunk/SOURCES
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/SOURCES/conserv-mass-adv-diff_sept2009_mod.f90

    r224 r261  
    3636integer :: itesti 
    3737integer :: itour 
    38  
     38double precision, dimension(nx,ny) :: H_local 
    3939 
    4040contains 
     
    503503 
    504504 
    505 call resol_adv_diff_2D_vect (Dmx,Dmy,advmx,advmy,Hp,i_Hp,bilmass,vieuxH,H) 
    506  
     505call resol_adv_diff_2D_vect (dble(Dmx),dble(Dmy),dble(advmx),dble(advmy),dble(Hp),i_Hp,dble(bilmass),dble(vieuxH),H_local) 
     506 
     507H(:,:) = real(H_local(:,:)) 
    507508!$OMP PARALLEL 
    508509!$OMP DO 
  • 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.