Changeset 416 for branches/GRISLIv3
- Timestamp:
- 04/07/23 18:14:43 (15 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GRISLIv3/SOURCES/mix-SIA-L1_mod.f90
r144 r416 14 14 module resolmeca_SIA_L1 15 15 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 20 18 21 19 contains 22 !> SUBROUTINE: init_resol_meca23 !! Routine pour l'initialisation de la resolution mecanique24 !>25 subroutine init_resol_meca20 !> SUBROUTINE: init_resol_meca 21 !! Routine pour l'initialisation de la resolution mecanique 22 !> 23 subroutine init_resol_meca 26 24 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 29 30 30 31 428 format(A) 31 32 32 ! lecture des parametres du run block eaubasale133 !--------------------------------------------------------------------34 rewind(num_param) ! pour revenir au debut du fichier param_list.dat35 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) 36 37 37 38 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_resolmeca42 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,*) 48 49 49 end subroutine init_resol_meca50 !> SUBROUTINE: mix_SIA_L151 !! Subroutine qui associe SIA et L1: la methode depend de i_resolmeca52 !>53 subroutine mix_SIA_L150 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 54 55 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 57 65 !!$ integer :: rang ,nb_taches 58 66 59 ! subroutine qui associe SIA et L160 ! la methode depend de i_resolmeca67 ! subroutine qui associe SIA et L1 68 ! la methode depend de i_resolmeca 61 69 62 70 63 ! use module_choix64 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') 65 73 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(:,:) 72 80 73 if (i_resolmeca.eq.1) then81 if (i_resolmeca.eq.1) then 74 82 75 ! prend les vitesses de la SIA si elles s'averent plus fortes76 ! que celles du L1. On garde le L1 comme vitesse basale.77 ! version utilisee pour les runs MIS11 de Cairns78 79 !$OMP DO80 do j=2,ny81 do i=2,nx82 if (flgzmx(i,j)) then83 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 L185 uxbar(i,j)=uxflgz(i,j)+uxdef(i,j) ! on ajoute la deform. SIA86 ubx(i,j) = uxflgz(i,j)87 debug_3D(i,j,9)=uxdef(i,j)88 end if89 end if83 ! 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 90 98 91 if (flgzmy(i,j)) then92 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 L194 uybar(i,j)=uyflgz(i,j)+uydef(i,j) ! on ajoute la deform. SIA95 uby(i,j) = uyflgz(i,j)96 debug_3D(i,j,10)=uydef(i,j)97 end if98 end if99 end do100 end do101 !$OMP END DO102 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 103 111 104 else if (i_resolmeca.eq.2) then112 else if (i_resolmeca.eq.2) then 105 113 106 ! addition systematique107 ! !$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 112 !$OMP DO113 do j=2,ny114 do i=2,nx115 ! test sur tout le tableau :116 if (flgzmx(i,j)) then117 ! debug_3D(i,j,11)=uxflgz(i,j)118 uxbar(i,j)=uxflgz(i,j)+uxdef(i,j) ! on ajoute la deform. SIA119 ubx(i,j) = uxflgz(i,j)120 ! do k=1,nz121 ! ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j) ! remplace le glissement par uxflgz122 ! end do114 ! 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 123 131 124 ! debug_3D(i,j,9)=uxdef(i,j)125 endif132 ! debug_3D(i,j,9)=uxdef(i,j) 133 endif 126 134 127 if (flgzmy(i,j)) then128 ! debug_3D(i,j,12)=uyflgz(i,j)129 uybar(i,j)=uyflgz(i,j)+uydef(i,j) ! on ajoute la deform. SIA130 uby(i,j) = uyflgz(i,j)131 ! do k=1,nz132 ! uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j) ! remplace le glissement par uyflgz133 ! end do135 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 134 142 135 ! debug_3D(i,j,10)=uydef(i,j)136 endif137 end do138 end do139 140 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 141 149 142 ! on ne recalcul ux que lorsque uxflgz est modifié soit tous les dtt143 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 149 !$OMP DO150 151 152 if (flgzmx(i,j)) then153 154 ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j) ! remplace le glissement par uxflgz155 end do156 endif157 if (flgzmy(i,j)) then158 159 uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j) ! remplace le glissement par uyflgz160 end do161 endif162 enddo163 enddo164 165 166 endif150 ! 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 167 175 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) 169 177 170 178 171 endif179 endif 172 180 173 181 174 ! afq -- initMIP outputs:182 ! afq -- initMIP outputs: 175 183 176 !$OMP WORKSHARE177 debug_3d(:,:,111) = ( (ux (:,:,1) + eoshift( ux(:,:,1) ,shift=1,boundary=0.,dim=1))/2. )/secyear178 debug_3d(:,:,112) = ( (uy (:,:,1) + eoshift( uy(:,:,1) ,shift=1,boundary=0.,dim=2))/2. )/secyear179 debug_3d(:,:,113) = ( uzr (:,:,1) * ice(:,:) )/secyear180 debug_3d(:,:,114) = ( (ux (:,:,nz) + eoshift( ux(:,:,nz),shift=1,boundary=0.,dim=1))/2. )/secyear181 debug_3d(:,:,115) = ( (uy (:,:,nz) + eoshift( uy(:,:,nz),shift=1,boundary=0.,dim=2))/2. )/secyear182 debug_3d(:,:,116) = ( uzr (:,:,nz) * ice(:,:) )/secyear183 !$OMP END WORKSHARE184 !$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 184 192 185 193 186 end subroutine mix_SIA_L1194 end subroutine mix_SIA_L1 187 195 188 196 end module resolmeca_SIA_L1
Note: See TracChangeset
for help on using the changeset viewer.