ini_w.f90

### TABLE OF CONTENTS

- 1. UTI/PRE/ini_w

## UTI/PRE/ini_w [ Modules ]

[ Top ] [ Modules ]

NOM

     ini_w(calc,nzonei,zonei)

DESCRIPTION

     Initialisation des ddls

     Dof initialization

SOURCE

    ! Ce logiciel est regi par la licence [CeCILL-B]
    ! This software is governed by the [CeCILL-B] license
    !=========================== DEBUT DES DECLARATIONS ====================
    !.1-----  Implicit, Use
      use num
      IMPLICIT NONE
    !.2-----  Declaration
      type(calcul)                                      :: calc   !! Objet calcul / Calcul object
      real(kind=kind(0.d0)),allocatable,dimension(:,:)  :: zonei  !! parametres d initialisation / Initialization parameters
      integer                                           :: nzonei !! parametres d initialisation / Initialization parameters

      integer                                           :: i,j,k
    !=========================== DEBUT DU CODE EXECUTABLE ==================

    ! Initialisation sur tout le domaine
          DO i=1,calc%msh%nb_cell
              calc%msh%list_cell(i)%w%vprim%v   =0.d0
              calc%msh%list_cell(i)%w%vbal%v    =0.d0
              calc%msh%list_cell(i)%balance%v   =0.d0
              calc%msh%list_cell(i)%fp%v        =0.d0
              calc%msh%list_cell(i)%w%gprim(1)%v=0.d0
              calc%msh%list_cell(i)%w%gprim(2)%v=0.d0
              calc%msh%list_cell(i)%w%gprim(3)%v=0.d0
              calc%msh%list_cell(i)%w%enti      =0.d0
              calc%msh%list_cell(i)%w%entf      =0.d0
              calc%msh%list_cell(i)%w%pe        =0.d0
              calc%msh%list_cell(i)%w%chi       =0.d0
              !CALL prim2bal(calc%msh%list_cell(i)%w)
          END DO

    ! Initialisation tube a choc
        if(nzonei.eq.0)then
          DO i=1,calc%msh%nb_cell
            IF (calc%msh%list_cell(i)%center%x.le.0.d0) THEN
                calc%msh%list_cell(i)%w%vprim%v=phy_state(1)%vprim%v
            ELSE
                calc%msh%list_cell(i)%w%vprim%v=phy_state(2)%vprim%v
            END IF
              CALL prim2bal(calc%msh%list_cell(i)%w)
          END DO
        endif

    ! Initialisation par zone
        if(nzonei.gt.0)then
          DO i=1,calc%msh%nb_cell
            DO j=1,nzonei
                 IF (calc%msh%list_cell(i)%center%x.ge.zonei(1,j).and. &
                     calc%msh%list_cell(i)%center%x.le.zonei(2,j).and. &
                     calc%msh%list_cell(i)%center%y.ge.zonei(3,j).and. &
                     calc%msh%list_cell(i)%center%y.le.zonei(4,j).and. &
                     calc%msh%list_cell(i)%center%z.ge.zonei(5,j).and. &
                     calc%msh%list_cell(i)%center%z.le.zonei(6,j)) THEN
                     do k=1,nvar
                       calc%msh%list_cell(i)%w%vprim%v(k)  = zonei(6+k,j)
                     enddo
                     IF(imodel_phy.eq.2.and.pes_xyz.eq.1)calc%msh%list_cell(i)%w%vprim%v(5)= &
                                                         calc%msh%list_cell(i)%w%vprim%v(5)+ &
                                                         calc%msh%list_cell(i)%w%vprim%v(1)*gpes_phy*&
                                                         (zonei(2,j)-calc%msh%list_cell(i)%center%x)
                     IF(imodel_phy.eq.2.and.pes_xyz.eq.2)calc%msh%list_cell(i)%w%vprim%v(5)=&
                                                         calc%msh%list_cell(i)%w%vprim%v(5)+ &
                                                         calc%msh%list_cell(i)%w%vprim%v(1)*gpes_phy*&
                                                         (zonei(4,j)-calc%msh%list_cell(i)%center%y)
                     IF(imodel_phy.eq.2.and.pes_xyz.eq.3)calc%msh%list_cell(i)%w%vprim%v(5)=&
                                                         calc%msh%list_cell(i)%w%vprim%v(5)+ &
                                                         calc%msh%list_cell(i)%w%vprim%v(1)*gpes_phy*&
                                                         (zonei(6,j)-calc%msh%list_cell(i)%center%z)
                  END IF
            ENDDO
            CALL prim2bal(calc%msh%list_cell(i)%w)
          END DO
        endif

    ! Initialisation par une fonction utilisateur
        if(nzonei.lt.0)then
          DO i=1,calc%msh%nb_cell
              CALL fct_iniw(calc%msh%list_cell(i)%center%x, &
                        calc%msh%list_cell(i)%center%y, &
                        calc%msh%list_cell(i)%center%z, &
                        calc%msh%list_cell(i)%w%vprim, &
                        -nzonei)
              CALL prim2bal(calc%msh%list_cell(i)%w)
          END DO
        endif

    !----------------------------------------------------------------
    ! Si presence de solides
    !----------------------------------------------------------------
          IF (calc%nb_sol .NE. 0) THEN
              DO j = 1,calc%nb_sol
                   k=0
                   DO i = 1,calc%msh%nb_cell
                        IF (         &
                        calc%msh%list_cell(i)%center%x<calc%list_sol(j)%xmax_s  &
                        .AND. calc%msh%list_cell(i)%center%x>calc%list_sol(j)%xmin_s  &
                        .AND. calc%msh%list_cell(i)%center%y<calc%list_sol(j)%ymax_s  &
                        .AND. calc%msh%list_cell(i)%center%y>calc%list_sol(j)%ymin_s  &
                        .AND. calc%msh%list_cell(i)%center%z<calc%list_sol(j)%zmax_s  &
                        .AND. calc%msh%list_cell(i)%center%z>calc%list_sol(j)%zmin_s) &
                        CALL raycasting(calc%list_sol(j),calc%msh%list_cell(i)%center%x,&
                                                         calc%msh%list_cell(i)%center%y,&
                                                         calc%msh%list_cell(i)%center%z,&
                                                         calc%msh%list_cell(i)%w%chi)
                        IF (calc%msh%list_cell(i)%w%chi .EQ. calc%list_sol(j)%id) then
                          k=k+1
                          calc%msh%list_cell(i)%w%vprim%v(1)=calc%list_sol(j)%rho
                          CALL prim2bal(calc%msh%list_cell(i)%w)
                        endif
                   END DO
                   calc%list_sol(j)%nb_cell = k
                   write( *,1010)j,calc%msh%numdom,calc%list_sol(j)%nb_cell
    1010           format('Solide ',i3,'  from domain',i3,'  number of cells affected',i9)
              END DO
          END IF
    !----------------------------------------------------------------
    ! Cas particulier du modele de SaintVenant
    !----------------------------------------------------------------
       IF(imodel_phy.ne.1)RETURN
       SELECT CASE (ibathy)
          CASE(0) ! Fond plat
              write(*,*)'INI_W-Info Flat Bottom and no friction'

          CASE(1) ! Initialisation de la bathymetrie par fonction utilisateur
              write(*,*)'INI_W-Info Bathymetry and friction  defined by user fonction number:',num_bathy
              DO i=1,calc%msh%nb_cell
                  CALL fct_bathy(calc%msh%list_cell(i)%center%x, &
                                 calc%msh%list_cell(i)%center%y, &
                                 calc%msh%list_cell(i)%center%z, &
                                 calc%msh%list_cell(i)%w%vprim%v(5), &
                                 calc%msh%list_cell(i)%w%gprim(1)%v(5),calc%msh%list_cell(i)%w%gprim(1)%v(5),&
                                 calc%msh%list_cell(i)%w%vprim%v(6))
              END DO

    !----------------------------------------
          CASE (2) ! Initialisation de la bathymetrie par interpolation lineaire par bloc
              write(*,*)'INI_W-Info Bathymetry and friction defined linearly per block on file:',fich_bathy
              call calc_bathy(calc)

    !------------------------------------------------------
          !~CASE (3) ! Initialisation de la bathymetrie par bloc sur le raffinement max
          !~    write(*,*)'INI_W-Info Bathymetry and friction defined per block at the highest mesh refinement level on file:',fich_bathy
          !~
          CASE DEFAULT
             call print_err('READ_BATH','Unforeseen case')

      END SELECT
      ! if(ngrad_bathy.eq.1) call grad_bathy(calc)  !!!!!!!!!!!!!! A FAIRE  !!!!!!!!!!!!!!!!!!!!!!!!!

    !===========================   FIN DE LA ROUTINE    ====================

    END SUBROUTINE ini_w