Changeset 416 for branches/GRISLIv3


Ignore:
Timestamp:
04/07/23 18:14:43 (15 months ago)
Author:
dumas
Message:

use only in module resolmeca_SIA_L1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GRISLIv3/SOURCES/mix-SIA-L1_mod.f90

    r144 r416  
    1414module resolmeca_SIA_L1 
    1515 
    16 ! module qui défini le type d'association entre L1 et SIA 
    17 ! test sur la variable globale i_resolmeca 
    18  
    19 use module3D_phy 
     16  ! module qui défini le type d'association entre L1 et SIA 
     17  ! test sur la variable globale i_resolmeca 
    2018 
    2119contains 
    22 !> SUBROUTINE: init_resol_meca 
    23 !! Routine pour l'initialisation de la resolution mecanique 
    24 !> 
    25 subroutine init_resol_meca 
     20  !> SUBROUTINE: init_resol_meca 
     21  !! Routine pour l'initialisation de la resolution mecanique 
     22  !> 
     23  subroutine init_resol_meca 
    2624 
    27 namelist/meca_SIA_L1/i_resolmeca 
    28 ! formats pour les ecritures dans 42 
     25    use module3D_phy, only:i_resolmeca,num_param,num_rep_42 
     26 
     27    implicit none 
     28    namelist/meca_SIA_L1/i_resolmeca 
     29    ! formats pour les ecritures dans 42 
    2930 
    3031428 format(A) 
    3132 
    32 ! lecture des parametres du run                      block eaubasale1 
    33 !-------------------------------------------------------------------- 
    34 rewind(num_param)        ! pour revenir au debut du fichier param_list.dat 
    35 read(num_param,meca_SIA_L1) 
     33    ! lecture des parametres du run                      block eaubasale1 
     34    !-------------------------------------------------------------------- 
     35    rewind(num_param)        ! pour revenir au debut du fichier param_list.dat 
     36    read(num_param,meca_SIA_L1) 
    3637 
    3738 
    38 write(num_rep_42,428)'!___________________________________________________________'  
    39 write(num_rep_42,428) '&meca_SIA_L1             ! bloc resol_meca ' 
    40 write(num_rep_42,*) 
    41 write(num_rep_42,*) 'i_resolmeca = ', i_resolmeca 
    42 write(num_rep_42,*)'/'                             
    43 write(num_rep_42,428) '! i_resolmeca type d association entre SIA et L1' 
    44 write(num_rep_42,428) '! i_resolmeca=0  chacun dans sa zone' 
    45 write(num_rep_42,428) '! i_resolmeca=1  dans les zones stream, addition si uxdef > uxL1 (MIS11 Cairns)' 
    46 write(num_rep_42,428) '! i_resolmeca=2  addition systematique dans les zones stream ' 
    47 write(num_rep_42,*) 
     39    write(num_rep_42,428)'!___________________________________________________________'  
     40    write(num_rep_42,428) '&meca_SIA_L1             ! bloc resol_meca ' 
     41    write(num_rep_42,*) 
     42    write(num_rep_42,*) 'i_resolmeca = ', i_resolmeca 
     43    write(num_rep_42,*)'/'                             
     44    write(num_rep_42,428) '! i_resolmeca type d association entre SIA et L1' 
     45    write(num_rep_42,428) '! i_resolmeca=0  chacun dans sa zone' 
     46    write(num_rep_42,428) '! i_resolmeca=1  dans les zones stream, addition si uxdef > uxL1 (MIS11 Cairns)' 
     47    write(num_rep_42,428) '! i_resolmeca=2  addition systematique dans les zones stream ' 
     48    write(num_rep_42,*) 
    4849 
    49 end subroutine init_resol_meca 
    50 !> SUBROUTINE: mix_SIA_L1 
    51 !! Subroutine qui associe SIA et L1: la methode depend de i_resolmeca 
    52 !> 
    53 subroutine mix_SIA_L1 
     50  end subroutine init_resol_meca 
     51  !> SUBROUTINE: mix_SIA_L1 
     52  !! Subroutine qui associe SIA et L1: la methode depend de i_resolmeca 
     53  !> 
     54  subroutine mix_SIA_L1 
    5455 
    55 !$ USE OMP_LIB 
    56 ! variables parallelisation openMP 
     56    !$ USE OMP_LIB 
     57    use geography, only:nx,ny,nz 
     58    use module3D_phy, only:debug_3D,ubx,uby,num_rep_42,flgzmx,flgzmy,uxbar,uybar,ux,uy,uzr,ice,i_resolmeca,& 
     59         uxflgz,uyflgz,uxdef,uydef,isynchro,secyear 
     60    use runparam, only:itracebug 
     61    implicit none 
     62 
     63    integer :: i,j,k 
     64    ! variables parallelisation openMP 
    5765!!$  integer :: rang ,nb_taches 
    5866 
    59 ! subroutine qui associe SIA et L1 
    60 ! la methode depend de i_resolmeca 
     67    ! subroutine qui associe SIA et L1 
     68    ! la methode depend de i_resolmeca 
    6169 
    6270 
    63 ! use module_choix 
    64 if (itracebug.eq.1)  call tracebug(' routine mix_SIA_L1') 
     71    ! use module_choix 
     72    if (itracebug.eq.1)  call tracebug(' routine mix_SIA_L1') 
    6573 
    66 debug_3D(:,:,9)=0. 
    67 debug_3D(:,:,10)=0. 
    68 debug_3D(:,:,11)=0. 
    69 debug_3D(:,:,12)=0. 
    70 debug_3D(:,:,13)=ubx(:,:) 
    71 debug_3D(:,:,14)=uby(:,:) 
     74    debug_3D(:,:,9)=0. 
     75    debug_3D(:,:,10)=0. 
     76    debug_3D(:,:,11)=0. 
     77    debug_3D(:,:,12)=0. 
     78    debug_3D(:,:,13)=ubx(:,:) 
     79    debug_3D(:,:,14)=uby(:,:) 
    7280 
    73 if (i_resolmeca.eq.1) then 
     81    if (i_resolmeca.eq.1) then 
    7482 
    75    ! prend les vitesses de la SIA si elles s'averent plus fortes 
    76    ! que celles du L1. On garde le L1 comme vitesse basale. 
    77    ! version utilisee pour les runs MIS11 de Cairns 
    78         !$OMP PARALLEL 
    79    !$OMP DO 
    80    do j=2,ny 
    81       do i=2,nx 
    82          if (flgzmx(i,j)) then  
    83             debug_3D(i,j,11)=uxflgz(i,j) 
    84             if (abs((uxdef(i,j)+ubx(i,j))).gt.abs(uxflgz(i,j))) then   ! SIA plus grande que L1 
    85                uxbar(i,j)=uxflgz(i,j)+uxdef(i,j)                       ! on ajoute la deform. SIA 
    86                ubx(i,j) = uxflgz(i,j) 
    87                debug_3D(i,j,9)=uxdef(i,j)              
    88             end if 
    89          end if 
     83       ! prend les vitesses de la SIA si elles s'averent plus fortes 
     84       ! que celles du L1. On garde le L1 comme vitesse basale. 
     85       ! version utilisee pour les runs MIS11 de Cairns 
     86       !$OMP PARALLEL 
     87       !$OMP DO 
     88       do j=2,ny 
     89          do i=2,nx 
     90             if (flgzmx(i,j)) then  
     91                debug_3D(i,j,11)=uxflgz(i,j) 
     92                if (abs((uxdef(i,j)+ubx(i,j))).gt.abs(uxflgz(i,j))) then   ! SIA plus grande que L1 
     93                   uxbar(i,j)=uxflgz(i,j)+uxdef(i,j)                       ! on ajoute la deform. SIA 
     94                   ubx(i,j) = uxflgz(i,j) 
     95                   debug_3D(i,j,9)=uxdef(i,j)              
     96                end if 
     97             end if 
    9098 
    91          if (flgzmy(i,j)) then  
    92             debug_3D(i,j,12)=uyflgz(i,j) 
    93             if (abs((uydef(i,j)+uby(i,j))).gt.abs(uyflgz(i,j))) then   ! SIA plus grande que L1 
    94                uybar(i,j)=uyflgz(i,j)+uydef(i,j)                       ! on ajoute la deform. SIA 
    95                uby(i,j) = uyflgz(i,j) 
    96                debug_3D(i,j,10)=uydef(i,j) 
    97             end if 
    98          end if 
    99       end do 
    100    end do 
    101    !$OMP END DO 
    102         !$OMP END PARALLEL 
     99             if (flgzmy(i,j)) then  
     100                debug_3D(i,j,12)=uyflgz(i,j) 
     101                if (abs((uydef(i,j)+uby(i,j))).gt.abs(uyflgz(i,j))) then   ! SIA plus grande que L1 
     102                   uybar(i,j)=uyflgz(i,j)+uydef(i,j)                       ! on ajoute la deform. SIA 
     103                   uby(i,j) = uyflgz(i,j) 
     104                   debug_3D(i,j,10)=uydef(i,j) 
     105                end if 
     106             end if 
     107          end do 
     108       end do 
     109       !$OMP END DO 
     110       !$OMP END PARALLEL 
    103111 
    104 else if (i_resolmeca.eq.2) then 
     112    else if (i_resolmeca.eq.2) then 
    105113 
    106 ! addition systematique 
    107 !       !$OMP PARALLEL PRIVATE(rang,nb_taches) 
    108 !       !$ rang=OMP_GET_THREAD_NUM() 
    109 !       !$ nb_taches=OMP_GET_NUM_THREADS() 
    110 !       !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 
    111         !$OMP PARALLEL 
    112    !$OMP DO 
    113    do j=2,ny 
    114       do i=2,nx 
    115 ! test sur tout le tableau : 
    116          if (flgzmx(i,j)) then  
    117 !            debug_3D(i,j,11)=uxflgz(i,j) 
    118             uxbar(i,j)=uxflgz(i,j)+uxdef(i,j)                       ! on ajoute la deform. SIA 
    119             ubx(i,j) = uxflgz(i,j) 
    120 !            do k=1,nz 
    121 !               ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j)           ! remplace le glissement par uxflgz 
    122 !            end do 
     114       ! addition systematique 
     115       !        !$OMP PARALLEL PRIVATE(rang,nb_taches) 
     116       !        !$ rang=OMP_GET_THREAD_NUM() 
     117       !        !$ nb_taches=OMP_GET_NUM_THREADS() 
     118       !        !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 
     119       !$OMP PARALLEL 
     120       !$OMP DO 
     121       do j=2,ny 
     122          do i=2,nx 
     123             ! test sur tout le tableau : 
     124             if (flgzmx(i,j)) then  
     125                !            debug_3D(i,j,11)=uxflgz(i,j) 
     126                uxbar(i,j)=uxflgz(i,j)+uxdef(i,j)                       ! on ajoute la deform. SIA 
     127                ubx(i,j) = uxflgz(i,j) 
     128                !            do k=1,nz 
     129                !               ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j)           ! remplace le glissement par uxflgz 
     130                !            end do 
    123131 
    124 !            debug_3D(i,j,9)=uxdef(i,j)                    
    125          endif 
     132                !            debug_3D(i,j,9)=uxdef(i,j)                    
     133             endif 
    126134 
    127          if (flgzmy(i,j)) then  
    128 !            debug_3D(i,j,12)=uyflgz(i,j) 
    129             uybar(i,j)=uyflgz(i,j)+uydef(i,j)                       ! on ajoute la deform. SIA 
    130             uby(i,j) = uyflgz(i,j) 
    131 !            do k=1,nz 
    132 !               uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j)           ! remplace le glissement par uyflgz 
    133 !            end do 
     135             if (flgzmy(i,j)) then  
     136                !            debug_3D(i,j,12)=uyflgz(i,j) 
     137                uybar(i,j)=uyflgz(i,j)+uydef(i,j)                       ! on ajoute la deform. SIA 
     138                uby(i,j) = uyflgz(i,j) 
     139                !            do k=1,nz 
     140                !               uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j)           ! remplace le glissement par uyflgz 
     141                !            end do 
    134142 
    135 !            debug_3D(i,j,10)=uydef(i,j)               
    136          endif 
    137       end do 
    138    end do 
    139         !$OMP END DO 
    140         !$OMP END PARALLEL 
     143                !            debug_3D(i,j,10)=uydef(i,j)               
     144             endif 
     145          end do 
     146       end do 
     147       !$OMP END DO 
     148       !$OMP END PARALLEL 
    141149 
    142 ! on ne recalcul ux que lorsque uxflgz est modifié soit tous les dtt 
    143         if (isynchro.eq.1) then 
    144 !       !$OMP PARALLEL PRIVATE(rang,nb_taches) 
    145 !       !$ rang=OMP_GET_THREAD_NUM() 
    146 !       !$ nb_taches=OMP_GET_NUM_THREADS() 
    147 !       !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 
    148         !$OMP PARALLEL 
    149    !$OMP DO 
    150         do j=2,ny 
    151                 do i=2,nx 
    152         if (flgzmx(i,j)) then  
    153                         do k=1,nz 
    154                ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j)           ! remplace le glissement par uxflgz 
    155             end do 
    156          endif 
    157          if (flgzmy(i,j)) then  
    158                         do k=1,nz 
    159                uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j)           ! remplace le glissement par uyflgz 
    160             end do 
    161          endif 
    162        enddo 
    163    enddo 
    164         !$OMP END DO 
    165         !$OMP END PARALLEL  
    166 endif 
     150       ! on ne recalcul ux que lorsque uxflgz est modifié soit tous les dtt 
     151       if (isynchro.eq.1) then 
     152          !     !$OMP PARALLEL PRIVATE(rang,nb_taches) 
     153          !     !$ rang=OMP_GET_THREAD_NUM() 
     154          !     !$ nb_taches=OMP_GET_NUM_THREADS() 
     155          !     !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 
     156          !$OMP PARALLEL 
     157          !$OMP DO 
     158          do j=2,ny 
     159             do i=2,nx 
     160                if (flgzmx(i,j)) then  
     161                   do k=1,nz 
     162                      ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j)           ! remplace le glissement par uxflgz 
     163                   end do 
     164                endif 
     165                if (flgzmy(i,j)) then  
     166                   do k=1,nz 
     167                      uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j)           ! remplace le glissement par uyflgz 
     168                   end do 
     169                endif 
     170             enddo 
     171          enddo 
     172          !$OMP END DO 
     173          !$OMP END PARALLEL  
     174       endif 
    167175 
    168 else ! SIA et L1 en 2 zones separe : pas d'action (uxbar est deja remis a uxflgz dans diffusiv) 
     176    else ! SIA et L1 en 2 zones separe : pas d'action (uxbar est deja remis a uxflgz dans diffusiv) 
    169177 
    170178 
    171 endif 
     179    endif 
    172180 
    173181 
    174 ! afq -- initMIP outputs: 
     182    ! afq -- initMIP outputs: 
    175183 
    176   !$OMP WORKSHARE 
    177   debug_3d(:,:,111) = ( (ux  (:,:,1)  + eoshift( ux(:,:,1) ,shift=1,boundary=0.,dim=1))/2.  )/secyear 
    178   debug_3d(:,:,112) = ( (uy  (:,:,1)  + eoshift( uy(:,:,1) ,shift=1,boundary=0.,dim=2))/2.  )/secyear 
    179   debug_3d(:,:,113) = ( uzr (:,:,1) * ice(:,:)                                              )/secyear 
    180   debug_3d(:,:,114) = ( (ux  (:,:,nz) + eoshift( ux(:,:,nz),shift=1,boundary=0.,dim=1))/2.  )/secyear 
    181   debug_3d(:,:,115) = ( (uy  (:,:,nz) + eoshift( uy(:,:,nz),shift=1,boundary=0.,dim=2))/2.  )/secyear 
    182   debug_3d(:,:,116) = ( uzr (:,:,nz) * ice(:,:)                                             )/secyear 
    183   !$OMP END WORKSHARE 
     184    !$OMP WORKSHARE 
     185    debug_3d(:,:,111) = ( (ux  (:,:,1)  + eoshift( ux(:,:,1) ,shift=1,boundary=0.,dim=1))/2.  )/secyear 
     186    debug_3d(:,:,112) = ( (uy  (:,:,1)  + eoshift( uy(:,:,1) ,shift=1,boundary=0.,dim=2))/2.  )/secyear 
     187    debug_3d(:,:,113) = ( uzr (:,:,1) * ice(:,:)                                              )/secyear 
     188    debug_3d(:,:,114) = ( (ux  (:,:,nz) + eoshift( ux(:,:,nz),shift=1,boundary=0.,dim=1))/2.  )/secyear 
     189    debug_3d(:,:,115) = ( (uy  (:,:,nz) + eoshift( uy(:,:,nz),shift=1,boundary=0.,dim=2))/2.  )/secyear 
     190    debug_3d(:,:,116) = ( uzr (:,:,nz) * ice(:,:)                                             )/secyear 
     191    !$OMP END WORKSHARE 
    184192 
    185193 
    186 end subroutine mix_SIA_L1 
     194  end subroutine mix_SIA_L1 
    187195 
    188196end module resolmeca_SIA_L1 
Note: See TracChangeset for help on using the changeset viewer.