Changeset 4119 for trunk/LMDZ.PLUTO/libf/phypluto/spreadglacier_paleo.F90
- Timestamp:
- Mar 10, 2026, 10:58:47 PM (5 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.PLUTO/libf/phypluto/spreadglacier_paleo.F90
r4040 r4119 48 48 REAL tgla(ngrid),tbase(ngrid) !temperature at the base of glacier different of ptsurf 49 49 REAL :: zdqsurf(ngrid) ! tendency of qsurf 50 REAL :: diff(ngrid) ! height difference (topography+ice layer) between two adjacent points 50 51 REAL massflow ! function 51 REAL hlim,qlim,difflim, diff,stock,H0,totmasstmp52 INTEGER compt !compteur52 REAL hlim,qlim,difflim,stock,H0,totmasstmp 53 INTEGER compt,nbedge 53 54 INTEGER slid ! option slid 0 or 1 54 55 INTEGER :: edge(4) ! index of the adjecent points, N,S,E,W … … 63 64 difflim=0.5 ! limit height (m) between two adjacent point to start spreading the glacier 64 65 zdqsurf(:)=0. 66 67 ! We set the number of edges to make it applicable for 1D case 68 IF (iim.eq.1) THEN 69 nbedge=2 ! 1D Case: Only check North/South 70 ELSE 71 nbedge=4 ! 3D Cse: Check N,S,E,W 72 ENDIF 73 65 74 !--------------- Dimensions ------------------------------------- 66 75 … … 73 82 qlim=hlim*1000. ! kg 74 83 !! Security for not depleted all ice too fast in one timestep 75 secu= 476 84 secu=2 85 77 86 !************************************* 78 87 ! Loop over all points 79 88 !************************************* 80 89 DO ig=1,ngrid 81 !if (ig.eq.ngrid) then82 ! print*, 'qpole=',pqsurf(ig,igcm_n2),qlim83 !endif84 90 85 91 !************************************* 86 92 ! if significant amount of ice, where qsurf > qlim 87 93 !************************************* 94 88 95 IF (pqsurf(ig,igcm_n2).gt.qlim) THEN 89 96 … … 94 101 tgla(ig)=ptsurf(ig) 95 102 ! temperature at the base (we neglect convection) 96 tbase(ig)=tgla(ig)+20.*pqsurf(ig,igcm_n2)/1.e6 ! Umurhan et al. 97 if (tbase(ig).gt.63.) then 103 ! tbase(ig)=tgla(ig)+20.*pqsurf(ig,igcm_n2)/1.e6 ! Umurhan et al. 104 105 ! DEBUG test: paleo simulation without basal melting 106 tbase(ig) = tgla(ig) 107 108 if (tbase(ig).gt.63.) then 98 109 slid=1 ! activate slide 99 110 else … … 150 161 151 162 masstmp(:)=0. ! mass to be transferred 163 diff(:)=0. ! height difference between adjacent points (m) 152 164 totmasstmp=0. ! total mass to be transferred 153 165 H0=phisfi0(ig)/g+pqsurf(ig,igcm_n2)/1000. ! height of ice at ig (m) … … 161 173 !! 1) Compute Diff H0-H1 and mass to be transferred for each adjacent point 162 174 DO i=inddeb,indfin 163 diff =H0-(phisfi0(i)/g+pqsurf(i,igcm_n2)/1000.) ! Height difference between ig and adjacent points (m)164 if (diff .gt.difflim) then165 masstmp(i)=massflow(ig,i,tgla(ig),diff ,pqsurf(ig,igcm_n2),timstep,slid) ! Mass to be transferred (kg/m2/s)175 diff(i)=H0-(phisfi0(i)/g+pqsurf(i,igcm_n2)/1000.) ! Height difference between ig and adjacent points (m) 176 if (diff(i).gt.difflim) then 177 masstmp(i)=massflow(ig,i,tgla(ig),diff(i),pqsurf(ig,igcm_n2),timstep,slid) ! Mass to be transferred (kg/m2/s) 166 178 else 167 179 masstmp(i)=0. … … 171 183 if (totmasstmp.gt.0.) then 172 184 !! 2) Available mass to be transferred 173 stock=m axval(masstmp(:))/secu! kg/m2/s185 stock=min(maxval(diff(:)*1000./timstep),maxval(masstmp(:))/secu) ! kg/m2/s 174 186 !! 3) Real amounts of ice to be transferred : 175 187 masstmp(:)=masstmp(:)/totmasstmp*stock*cell_area(ig)/cell_area(inddeb) !kg/m2/s all area around the pole are the same … … 217 229 218 230 !! 1) Compute Diff H0-H1 and mass to be transferred for each adjacent point 219 DO compt=1, 4231 DO compt=1,nbedge 220 232 i=edge(compt) 221 diff=H0-(phisfi0(i)/g+pqsurf(i,igcm_n2)/1000.) ! (m) 222 if (diff.gt.difflim) then 223 masstmp(i)=massflow(ig,i,tgla(ig),diff,pqsurf(ig,igcm_n2),timstep,slid) 233 diff(i)=H0-(phisfi0(i)/g+pqsurf(i,igcm_n2)/1000.) ! (m) 234 235 236 if (diff(i).gt.difflim) then 237 masstmp(i)=massflow(ig,i,tgla(ig),diff(i),pqsurf(ig,igcm_n2),timstep,slid) 238 239 224 240 else 225 241 masstmp(i)=0. … … 229 245 if (totmasstmp.gt.0) then 230 246 !! 2) Available mass to be transferred 231 stock=m axval(masstmp(:))/secu! kg/m2/s247 stock=min(maxval(diff(:)*1000./timstep),maxval(masstmp(:))/secu) ! kg/m2/s 232 248 !! 3) Real amounts of ice to be transferred : 233 DO compt=1, 4249 DO compt=1,nbedge 234 250 i=edge(compt) 235 251 masstmp(i)=masstmp(i)/totmasstmp*stock*cell_area(ig)/cell_area(i) !kg/m2/s … … 246 262 pqsurf(ig,igcm_ch4_ice)=pqsurf(ig,igcm_ch4_ice)+dqch4 247 263 !! add CH4 248 DO compt=1, 4264 DO compt=1,nbedge 249 265 i=edge(compt) 250 266 pqsurf(i,igcm_ch4_ice)=pqsurf(i,igcm_ch4_ice)-masstmp(i)/stock*dqch4 … … 257 273 pqsurf(ig,igcm_co_ice)=pqsurf(ig,igcm_co_ice)+dqco 258 274 !! add CO 259 DO compt=1, 4275 DO compt=1,nbedge 260 276 i=edge(compt) 261 277 pqsurf(i,igcm_co_ice)=pqsurf(i,igcm_co_ice)-masstmp(i)/stock*dqco … … 265 281 ! Add N2 266 282 totmasstmp=0. 267 DO compt=1, 4283 DO compt=1,nbedge 268 284 i=edge(compt) 269 285 pqsurf(i,igcm_n2)=pqsurf(i,igcm_n2)+masstmp(i)*timstep … … 285 301 286 302 ENDDO ! ig 303 287 304 288 305 end subroutine spreadglacier_paleo
Note: See TracChangeset
for help on using the changeset viewer.
