Changeset 375 for branches/GRISLIv3
- Timestamp:
- 03/20/23 15:55:43 (16 months ago)
- Location:
- branches/GRISLIv3/SOURCES
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GRISLIv3/SOURCES/3D-physique-gen_mod.f90
r333 r375 350 350 real,dimension(nx,ny) :: W0 !< enfoncement du socle a l'equilibre isostatique 351 351 real,dimension(nx,ny) :: W1 !< enfoncement du socle courant 352 real,dimension(nx,ny) :: XX !< work array353 352 real,dimension(nx,ny) :: XLONG !< longitude 354 353 real,dimension(nx,ny) :: YLAT !< latitude -
branches/GRISLIv3/SOURCES/initial2-0.4.f90
r237 r375 52 52 UYBAR(:,:)=0. 53 53 VBAR(:,:)=0. 54 XX(:,:)=0.55 54 IBASE(:,:)=1 56 55 TPMP(:,:,1)=0 -
branches/GRISLIv3/SOURCES/velocities-polyn-0.3.f90
r372 r375 15 15 ! ========================================================================== 16 16 ! 17 subroutine SIA_velocities() 17 subroutine SIA_velocities 18 18 ! 19 19 ! … … 23 23 ! Attention la vitesse verticale est "super reduite" 24 24 ! ========================================================================== 25 !$ USE OMP_LIB 26 use module3d_phy 27 !use deform_declar 28 USE module_choix 25 !$ USE OMP_LIB 26 use runparam, only : itracebug 27 use module3d_phy, only: nx,ny,nz,dx,flotmx,flotmy,ux,uy,sux,suy,sdx,sdy,ubx,uby,& 28 hmx,hmy,uxbar,uybar,iglen,cde,divu,uzr,bmelt,bm,flot,front,flgzmx,flgzmy,& 29 uzsdot,dtt,uzk,bdot,hdot 30 use deformation_mod_2lois, only: n1poly,n2poly,ddx,ddy,sa_mx,sa_my,s2a_mx,s2a_my 29 31 30 implicit none32 implicit none 31 33 32 real, dimension(nx,ny) :: hdd 34 integer :: i,j,k 35 real, dimension(nx,ny) :: hdd 36 real, dimension(nx,ny) :: xx 33 37 34 if (itracebug.eq.1) call tracebug(' Entree dans routine SIA_velocity')38 if (itracebug.eq.1) call tracebug(' Entree dans routine SIA_velocity') 35 39 36 !$OMP PARALLEL 37 !$OMP DO COLLAPSE(2) 38 do k=1,nz 39 do j=2,ny-1 40 do i=2,nx-1 40 !$OMP PARALLEL 41 xx(:,:)=0. 42 !$OMP DO COLLAPSE(2) 43 do k=1,nz 44 do j=2,ny-1 45 do i=2,nx-1 41 46 42 ! flgzmx pour tous les points qui sont traites par l'equation elliptique43 ! diagnoshelf47 ! flgzmx pour tous les points qui sont traites par l'equation elliptique 48 ! diagnoshelf 44 49 45 ! Selon X46 ! -------------------------------------47 ! if (.not.flgzmx(i,j)) then ! utilise ubx au lieu de ddbx (compatibilite avec mix et spinup)48 ! ux(i,j,k)=ddbx(i,j)49 ! sux(i,j,k)=ddbx(i,j)*cde(k)50 ! Selon X 51 ! ------------------------------------- 52 ! if (.not.flgzmx(i,j)) then ! utilise ubx au lieu de ddbx (compatibilite avec mix et spinup) 53 ! ux(i,j,k)=ddbx(i,j) 54 ! sux(i,j,k)=ddbx(i,j)*cde(k) 50 55 51 if (.not.flotmx(i,j)) then ! version aout 2010 (Cat)52 53 56 if (.not.flotmx(i,j)) then ! version aout 2010 (Cat) 57 ! utilise ubx au lieu de ddbx (compatibilite avec mix et spinup) 58 ! et agit sur tous les points poses 54 59 55 ux(i,j,k) = 0.56 sux(i,j,k)= 0.60 ux(i,j,k) = 0. 61 sux(i,j,k)= 0. 57 62 58 do iglen=n1poly,n2poly59 ux(i,j,k) = ux(i,j,k)+ddx(i,j,iglen)*sa_mx(i,j,k,iglen)60 sux(i,j,k) = sux(i,j,k)+ddx(i,j,iglen)*s2a_mx(i,j,k,iglen)61 end do62 ux(i,j,k) = ux(i,j,k)*(-sdx(i,j))63 ux(i,j,k) = ux(i,j,k) + ubx(i,j) ! ajoute le glissement63 do iglen=n1poly,n2poly 64 ux(i,j,k) = ux(i,j,k)+ddx(i,j,iglen)*sa_mx(i,j,k,iglen) 65 sux(i,j,k) = sux(i,j,k)+ddx(i,j,iglen)*s2a_mx(i,j,k,iglen) 66 end do 67 ux(i,j,k) = ux(i,j,k)*(-sdx(i,j)) 68 ux(i,j,k) = ux(i,j,k) + ubx(i,j) ! ajoute le glissement 64 69 65 sux(i,j,k) = sux(i,j,k)*sdx(i,j)*hmx(i,j)66 sux(i,j,k) = sux(i,j,k) - ubx(i,j) * cde(k)70 sux(i,j,k) = sux(i,j,k)*sdx(i,j)*hmx(i,j) 71 sux(i,j,k) = sux(i,j,k) - ubx(i,j) * cde(k) 67 72 68 else69 sux(i,j,k) = (nz-k)*1./(nz-1.)*uxbar(i,j)*hmx(i,j)70 ux(i,j,k) = uxbar(i,j)71 end if73 else 74 sux(i,j,k) = (nz-k)*1./(nz-1.)*uxbar(i,j)*hmx(i,j) 75 ux(i,j,k) = uxbar(i,j) 76 end if 72 77 73 ! Selon Y74 ! -------------------------------------75 ! if (.not.flgzmy(i,j)) then76 ! uy(i,j,k)=ddby(i,j)77 ! suy(i,j,k)=ddby(i,j)*cde(k)78 ! Selon Y 79 ! ------------------------------------- 80 ! if (.not.flgzmy(i,j)) then 81 ! uy(i,j,k)=ddby(i,j) 82 ! suy(i,j,k)=ddby(i,j)*cde(k) 78 83 79 if (.not.flotmy(i,j)) then ! version aout 2010 (Cat)80 81 84 if (.not.flotmy(i,j)) then ! version aout 2010 (Cat) 85 ! utilise uby au lieu de ddby (compatibilite avec mix et spinup) 86 ! et agit sur tous les points poses 82 87 83 uy(i,j,k) = 0.84 suy(i,j,k)= 0.88 uy(i,j,k) = 0. 89 suy(i,j,k)= 0. 85 90 86 91 87 do iglen=n1poly,n2poly88 uy(i,j,k) = uy(i,j,k)+ddy(i,j,iglen)*sa_my(i,j,k,iglen)89 suy(i,j,k) = suy(i,j,k)+ddy(i,j,iglen)*s2a_my(i,j,k,iglen)90 end do91 uy(i,j,k) = uy(i,j,k)*(-sdy(i,j))92 uy(i,j,k) = uy(i,j,k) + uby(i,j) ! ajoute le glissement92 do iglen=n1poly,n2poly 93 uy(i,j,k) = uy(i,j,k)+ddy(i,j,iglen)*sa_my(i,j,k,iglen) 94 suy(i,j,k) = suy(i,j,k)+ddy(i,j,iglen)*s2a_my(i,j,k,iglen) 95 end do 96 uy(i,j,k) = uy(i,j,k)*(-sdy(i,j)) 97 uy(i,j,k) = uy(i,j,k) + uby(i,j) ! ajoute le glissement 93 98 94 suy(i,j,k) = suy(i,j,k)*sdy(i,j)*hmy(i,j)95 suy(i,j,k) = suy(i,j,k) - uby(i,j) * cde(k)99 suy(i,j,k) = suy(i,j,k)*sdy(i,j)*hmy(i,j) 100 suy(i,j,k) = suy(i,j,k) - uby(i,j) * cde(k) 96 101 97 else98 suy(i,j,k) = (nz-k)*1./(nz-1)*uybar(i,j)*hmy(i,j)99 uy(i,j,k)=uybar(i,j)100 endif102 else 103 suy(i,j,k) = (nz-k)*1./(nz-1)*uybar(i,j)*hmy(i,j) 104 uy(i,j,k)=uybar(i,j) 105 endif 101 106 102 end do103 end do104 end do105 !$OMP END DO107 end do 108 end do 109 end do 110 !$OMP END DO 106 111 107 ! *************************** Z VELOCITIES ******************112 ! *************************** Z VELOCITIES ****************** 108 113 109 !$OMP DO110 do j=2,ny-1111 do i=2,nx-1114 !$OMP DO 115 do j=2,ny-1 116 do i=2,nx-1 112 117 113 divu(i,j)=((uxbar(i+1,j)*hmx(i+1,j)-uxbar(i,j)*hmx(i,j)) & ! formulation explicite114 + (uybar(i,j+1)*hmy(i,j+1)-uybar(i,j)*hmy(i,j)))/dx118 divu(i,j)=((uxbar(i+1,j)*hmx(i+1,j)-uxbar(i,j)*hmx(i,j)) & ! formulation explicite 119 + (uybar(i,j+1)*hmy(i,j+1)-uybar(i,j)*hmy(i,j)))/dx 115 120 116 uzr(i,j,nz)=bmelt(i,j)117 xx(i,j)=uzr(i,j,1)118 hdd(i,j)=bm(i,j)-bmelt(i,j)-divu(i,j) ! formulation explicite de dH/dt121 uzr(i,j,nz)=bmelt(i,j) 122 xx(i,j)=uzr(i,j,1) 123 hdd(i,j)=bm(i,j)-bmelt(i,j)-divu(i,j) ! formulation explicite de dH/dt 119 124 120 ! -------------------------------------------------------------------121 ! attention uzr contient maintenant :122 ! uzr=uz +u ((1-e)*dH/dx+dB/dx)+ ((1-e)*dH/dt+dB/dt)125 ! ------------------------------------------------------------------- 126 ! attention uzr contient maintenant : 127 ! uzr=uz +u ((1-e)*dH/dx+dB/dx)+ ((1-e)*dH/dt+dB/dt) 123 128 124 125 126 127 128 129 +(suy(i,j+1,k)-suy(i,j,k)))/dx130 129 do k=1,nz-1 130 if (.not.flot(i,j).and.(front(i,j).eq.4.).and..not.flgzmx(i,j) & 131 .and..not.flgzmx(i+1,j).and..not.flgzmy(i,j) & 132 .and..not.flgzmy(i,j+1)) then 133 uzr(i,j,k)=uzr(i,j,nz)-((sux(i+1,j,k)-sux(i,j,k)) & 134 +(suy(i,j+1,k)-suy(i,j,k)))/dx 135 uzr(i,j,k)=uzr(i,j,k)+hdd(i,j)*cde(k) 131 136 132 137 else 133 138 134 ! dans l'ice-shelf la vitesse uzr est lineaire ...135 ! -------------------------------------------------139 ! dans l'ice-shelf la vitesse uzr est lineaire ... 140 ! ------------------------------------------------- 136 141 137 ! attention, dans les zones stream, le vitesse verticale n'est pas138 ! lineaire si elle est voisine d'un point .not.flgzmx139 ! le calcul se fait alors par differences finies142 ! attention, dans les zones stream, le vitesse verticale n'est pas 143 ! lineaire si elle est voisine d'un point .not.flgzmx 144 ! le calcul se fait alors par differences finies 140 145 141 146 uzr(i,j,k)= bm(i,j)+(k-1.)/(nz-1.)*(bmelt(i,j)-bm(i,j)) 142 147 end if 143 148 144 149 end do 145 150 146 151 end do 147 end do148 !$OMP END DO152 end do 153 !$OMP END DO 149 154 150 !$OMP DO155 !$OMP DO 151 156 do j=2,ny-1 152 157 do i=2,nx-1 … … 155 160 end do 156 161 end do 157 !$OMP END DO158 !$OMP END PARALLEL162 !$OMP END DO 163 !$OMP END PARALLEL 159 164 160 165 end subroutine SIA_velocities
Note: See TracChangeset
for help on using the changeset viewer.