Changeset 15140
- Timestamp:
- 05/29/13 13:53:49 (12 years ago)
- Location:
- issm/trunk-jpl/src/c/modules/GiaDeflectionCorex
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp
r15037 r15140 21 21 }; 22 22 23 struct blockn{24 int irate;25 };26 27 23 struct blockrad{ 28 24 double distrad; … … 30 26 31 27 struct blocks{ 32 double aswokm; 28 double aswokm_w; 29 double aswokm_dwdt; 33 30 }; 34 31 … … 39 36 extern struct blockp blockp_; 40 37 extern struct blocko blocko_; 41 extern struct blockn blockn_;42 38 extern struct blockrad blockrad_; 43 39 extern struct blocks blocks_; … … 63 59 /*gia solution parameters: */ 64 60 int iedge=0; 65 int irate=0;66 61 67 62 /*gia inputs: */ … … 111 106 rho_ice=arguments->rho_ice; 112 107 disk_id=arguments->idisk; 113 irate=arguments->irate;114 108 iedge=arguments->iedge; 115 109 yts=arguments->yts; … … 118 112 119 113 /*Modify inputs to match naruse code: */ 120 //from our model, irate comes in with values in [1,2], which maps into [0,1] in naruse:121 irate=irate-1;122 114 Ntime=numtimes; 123 115 Ntimm=Ntime-1; … … 155 147 blockt_dmi=xNew<IssmDouble>(Ntimm); 156 148 157 /*irate: */158 blockn_.irate=irate;159 160 149 /*radial distance of i-th element: */ 161 150 blockrad_.distrad=ri/1000.0; // in km … … 169 158 170 159 /*output solution: */ 171 if(irate==0){ 172 wi = blocks_.aswokm; 173 *pwi=wi; 174 *pdwidt=0; 175 } 176 else if (irate==1){ 177 *pwi=0; 178 dwidt = blocks_.aswokm; 179 *pdwidt=dwidt; 180 } 160 wi = blocks_.aswokm_w; 161 dwidt = blocks_.aswokm_dwdt; 162 *pwi=wi; 163 *pdwidt=dwidt; 181 164 182 165 /*Free ressources: */ -
issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/freed.f
r14768 r15140 2 2 1,amps) 3 3 implicit double precision (a-h,o-z) 4 double precision decay(2),amps( 3)4 double precision decay(2),amps(5) 5 5 double precision ac0,ac1,ac2,ac3,ac4,ac5,ac6,ac7,ac8,ac9,ac10, 6 6 1ac11 7 7 common /blockz/ zkp 8 common /blockn/ irate9 8 data zero /0.0d0/, g /9.832186d0/ 10 9 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: … … 215 214 amps(2) = decdif*( decay(2) * ( a1 - a2*decay(2) ) - a0 ) 216 215 amps(3) = a2 217 if(irate.eq.0) go to 999 218 amps(1) = - decay(1) * amps(1) 219 amps(2) = - decay(2) * amps(2) 216 amps(4) = - decay(1) * amps(1) 217 amps(5) = - decay(2) * amps(2) 220 218 go to 999 221 219 9990 write(6,998) idgen -
issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/ojrule.f
r15024 r15140 1 subroutine ojrule(dk,bcin )1 subroutine ojrule(dk,bcin_w,bcin_dwdt) 2 2 implicit double precision(a-h,o-z) 3 3 parameter (nhank = 1024) 4 double precision yvalue(nhank),bcin(nhank) 5 double precision wok, rpos 4 double precision yvalue_w(nhank),yvalue_dwdt(nhank) 5 double precision bcin_w(nhank),bcin_dwdt(nhank) 6 double precision wok_w,wok_dwdt,rpos 7 double precision swok_w,swok_dwdt 6 8 double precision pset(7) 7 double precision aswokm ,distrad9 double precision aswokm_w,aswokm_dwdt,distrad 8 10 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 9 11 common /blockrad/ distrad 10 12 common /blockp/ pset 11 common /blockn/ irate 12 common /blocks/ aswokm 13 common /blocks/ aswokm_w,aswokm_dwdt 13 14 data zero /0.0d0/, one /1.0d0/, two /2.0d0/, three /3.0d0/, 14 15 1rescal/ 1.0d0/ 16 data yearco /3.15576d7/ 15 17 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 16 iprate = irate + 117 18 bath = dk / three 18 19 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 19 c rpos eshould be normalized wrt lithosphere thickness20 c rpos should be normalized wrt lithosphere thickness 20 21 c give r is normalized dist_rad :: r == dist_rad / h 21 22 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: … … 30 31 rak = ak * r 31 32 rarg = dbesj0( rak ) 32 yvalue(ik) = bcin(ik) * rarg 33 yvalue_w(ik) = bcin_w(ik) * rarg 34 yvalue_dwdt(ik) = bcin_dwdt(ik) * rarg 33 35 425 continue 34 36 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: … … 37 39 c find the area under the curve using the Simpson's rule formulas 38 40 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 39 sumde = zero 41 sumde_w = zero 42 sumde_dwdt = zero 40 43 do 300 int = 1, nhank 41 44 intp1 = int + 1 42 45 ide = 2 + ( (-1)**intp1 + 1 ) 43 46 fide = dfloat(ide) 44 sumde = ( fide * yvalue(int) ) + sumde 47 sumde_w = ( fide * yvalue_w(int) ) + sumde_w 48 sumde_dwdt = ( fide * yvalue_dwdt(int) ) + sumde_dwdt 45 49 300 continue 46 wok = bath * sumde 47 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 48 go to (1000,2000), iprate 49 1000 call wolfc(rpos,wok) 50 go to 999 51 2000 call rates(rpos,wok) 52 999 return 53 54 end 55 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 56 57 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 58 subroutine wolfc(rpos,wok) 59 double precision wok, rpos 60 double precision pset(7) 61 double precision swok,asrpos, aswokm 62 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 63 common /blockp/ pset 64 common /blocks/ aswokm 65 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 66 c make single prec. and return to dimensional units. 50 wok_w = bath * sumde_w 51 wok_dwdt = bath * sumde_dwdt 52 67 53 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 68 54 hscale = sngl(pset(1)) 69 55 hsckm = hscale / 1.0e3 70 swok = hscale * sngl(wok) 71 asrpos = hsckm * sngl(rpos) 72 aswokm = swok 56 swok_w = hscale * sngl(wok_w) 57 aswokm_w = swok_w 58 swok_dwdt = (hscale * yearco * 1.0e3 * sngl(wok_dwdt)) 59 1 * ( sngl(pset(4))/ sngl(pset(2)) ) 60 aswokm_dwdt = swok_dwdt 61 return 73 62 74 return75 63 end 76 c ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::77 78 c ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::79 subroutine rates(rpos,wok)80 double precision wok, rpos81 double precision pset(7)82 double precision swok, asrpos, aswokm83 c ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::84 common /blockp/ pset85 common /blocks/ aswokm86 c ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::87 data ngyo /050201/88 data ngyii /050201/89 data yearco /3.15576d7/90 c ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::91 c make single prec. and return to dimensional units.92 c ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::93 hscale = sngl(pset(1))94 hsckm = hscale / 1.0e395 swok = (hscale * yearco * 1.0e3 * sngl(wok))96 1 * ( sngl(pset(4))/ sngl(pset(2)) )97 asrpos = hsckm * sngl(rpos)98 aswokm = swok99 100 return101 end -
issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/pwise.f
r14739 r15140 1 subroutine pwise(t,ta,tb,xi1,xi2,slope,ycept,decay,bhaq) 1 subroutine pwise(t,ta,tb,xi1,xi2,xi3,xi4,slope,ycept,decay, 2 1bhaq_w,bhaq_dwdt) 2 3 implicit double precision (a-h,o-z) 3 4 double precision decay(2) … … 19 20 eb2 = dexp(gbt2) 20 21 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 21 c define xi 1 term:22 c define xit1 term: 22 23 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 23 xi 1t=(ycept/decay(1)) * (eb1 - ea1) -24 xit1 =(ycept/decay(1)) * (eb1 - ea1) - 24 25 1(slope/(decay(1)*decay(1))) * 25 26 2 ( (1.0d0 - tb*decay(1))*eb1 26 27 3 - (1.0d0 - ta*decay(1))*ea1 ) 27 28 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 28 c define xi 2 term:29 c define xit2 term: 29 30 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 30 xi 2t=(ycept/decay(2)) * (eb2 - ea2) -31 xit2 =(ycept/decay(2)) * (eb2 - ea2) - 31 32 1(slope/(decay(2)*decay(2))) * 32 33 2 ( (1.0d0 - tb*decay(2))*eb2 … … 36 37 c ABOVE IS THE NON-DEGENERATE CASE 37 38 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 38 bhaq = (xi1 * xi1t) + (xi2 * xi2t) 39 bhaq_w = (xi1 * xit1) + (xi2 * xit2) 40 bhaq_dwdt = (xi3 * xit1) + (xi4 * xit2) 39 41 return 40 42 end -
issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/qwise.f
r14768 r15140 1 subroutine qwise(t,ta,qjadon,xi0,xi1,xi2,slope,ycept,decay,bhaq) 1 subroutine qwise(t,ta,qjadon,xi0,xi1,xi2,xi3,xi4,slope,ycept, 2 1decay,bhaq_w,bhaq_dwdt) 2 3 implicit double precision (a-h,o-z) 3 4 double precision decay(2) 4 common /blockn/ irate5 iprate = irate + 16 5 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 7 6 c This subroutine retrieves the convolution for the J-th linear piece-wise … … 18 17 xg1 = xi1/(decay(1)*decay(1)) 19 18 xg2 = xi2/(decay(2)*decay(2)) 19 xg3 = xi3/(decay(1)*decay(1)) 20 xg4 = xi4/(decay(2)*decay(2)) 20 21 gb1 = decay(1)*ycept 21 22 gb2 = decay(2)*ycept 22 go to ( 66, 67 ), iprate23 23 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 24 c define xi 0tterm:24 c define xit0 term: 25 25 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 26 66 xi0t= (xi0 + qjadon) * ( ( slope * t ) + ycept )26 xit0_w = (xi0 + qjadon) * ( ( slope * t ) + ycept ) 27 27 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 28 c define xi 1tterm:28 c define xit1 term: 29 29 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 30 xi 1t= xg1 * (30 xit1_w = xg1 * ( 31 31 1 gb1 + slope * ( ( t * decay(1) ) - 1.0d0 ) 32 32 2 - ( gb1 + slope * ( ( ta * decay(1) ) - 1.0d0 )) … … 34 34 4 ) 35 35 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 36 c define xi 2tterm:36 c define xit2 term: 37 37 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 38 xi 2t= xg2 * (38 xit2_w = xg2 * ( 39 39 1 gb2 + slope * ( ( t * decay(2) ) - 1.0d0 ) 40 40 2 - ( gb2 + slope * ( ( ta * decay(2) ) - 1.0d0 ) ) 41 41 3 * dexp( decay(2) * (ta - t) ) 42 42 4 ) 43 go to 9044 43 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 45 44 c And the rate equivalents: … … 47 46 c having corrected in x1t, x2t pass). 48 47 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 49 67 xi0t = (xi0 + qjadon) * slope50 xi 1t =-xg1* (48 xit0_dwdt = (xi0 + qjadon) * slope 49 xit1_dwdt =-xg3 * ( 51 50 1 slope 52 51 2 + ( gb1 + slope * ( ( ta * decay(1) ) - 1.0d0 )) 53 52 3 * dexp( decay(1) * (ta - t) ) 54 53 4 ) 55 xi 2t =-xg2* (54 xit2_dwdt =-xg4 * ( 56 55 1 slope 57 56 2 + ( gb2 + slope * ( ( ta * decay(2) ) - 1.0d0 )) … … 61 60 c add terms for the J-th (and final) interval contribution. 62 61 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 63 90 bhaq = xi0t + xi1t + xi2t 62 bhaq_w = xit0_w + xit1_w + xit2_w 63 bhaq_dwdt = xit0_dwdt + xit1_dwdt + xit2_dwdt 64 64 return 65 65 end -
issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/stot.f
r15024 r15140 1 subroutine stot(ikval,qjadon,fltng,Ntimp,Ntimm,time,bi,dmi) 1 subroutine stot(ikval,qjadon,fltng_w,fltng_dwdt,Ntimp,Ntimm, 2 1time,bi,dmi) 2 3 implicit double precision (a-h,o-z) 3 4 integer Ntimp,Ntimm … … 8 9 double precision time(Ntimp),bi(Ntimm),dmi(Ntimm) 9 10 double precision dekay1(nhank),dekay2(nhank),amp0(nhank), 10 1amp1(nhank),amp2(nhank) 11 1amp1(nhank),amp2(nhank),amp3(nhank),amp4(nhank) 11 12 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 12 common /blockm/ dekay1,dekay2,amp0,amp1,amp2 13 common /blockm/ dekay1,dekay2,amp0,amp1,amp2,amp3,amp4 13 14 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 14 15 c This subroutine returns the inverse Laplace transform to the … … 36 37 xi1 = amp1(ikval) 37 38 xi2 = amp2(ikval) 39 xi3 = amp3(ikval) 40 xi4 = amp4(ikval) 38 41 39 42 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: … … 41 44 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 42 45 t = time(Ntimp) 43 sumb = 0.0d0 46 sumb_w = 0.0d0 47 sumb_dwdt = 0.0d0 44 48 ta = time(1) 45 49 tb = time(2) … … 56 60 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 57 61 if( t . gt . ta . and . t . le . tb) go to 38 58 call pwise(t,ta,tb,xi1,xi2,slope,ycept,decay,bhaq) 62 call pwise(t,ta,tb,xi1,xi2,xi3,xi4,slope,ycept,decay, 63 1bhaq_w,bhaq_dwdt) 59 64 go to 39 60 65 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: … … 62 67 c evaluation still has to consider the load itself 63 68 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 64 38 call qwise(t,ta,qjadon,xi0,xi1,xi2,slope,ycept,decay,bhaq) 65 39 sumb = bhaq + sumb 69 38 call qwise(t,ta,qjadon,xi0,xi1,xi2,xi3,xi4,slope,ycept,decay, 70 1bhaq_w,bhaq_dwdt) 71 39 sumb_w = bhaq_w + sumb_w 72 sumb_dwdt = bhaq_dwdt + sumb_dwdt 66 73 ta = time(i + 1) 67 74 tb = time(i + 2) 68 75 97 continue 69 fltng = sumb 76 fltng_w = sumb_w 77 fltng_dwdt = sumb_dwdt 70 78 return 71 79 end -
issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/what0.f
r15025 r15140 5 5 parameter (N = nhank/2) 6 6 double precision dekay1(nhank),dekay2(nhank),amp0(nhank), 7 1amp1(nhank),amp2(nhank),zksam(nhank),zksamp(nhank) 8 double precision decay(2),pset(7),amps(3), 7 1amp1(nhank),amp2(nhank),amp3(nhank),amp4(nhank), 8 1zksam(nhank),zksamp(nhank) 9 double precision decay(2),pset(7),amps(5), 9 10 1decta(2),dyri1(nhank),dyri2(nhank),sna(nhank) 10 double precision cinner(nhank),bcin(nhank) 11 double precision cinner_w(nhank),cinner_dwdt(nhank) 12 double precision bcin_w(nhank),bcin_dwdt(nhank) 11 13 double precision time(Ntimp),bi(Ntimm),dmi(Ntimm) 12 14 integer maxk … … 14 16 common /blockp/ pset 15 17 common /blockz/ zkp 16 common /blockm/ dekay1,dekay2,amp0,amp1,amp2 18 common /blockm/ dekay1,dekay2,amp0,amp1,amp2,amp3,amp4 17 19 data yearco /3.15576d7/, pi /3.1415926535897932384d0/ 18 20 data g /9.832186d0/, four /4.d0/, two /2.0d0/, … … 69 71 amp1(ik) = amps(1) 70 72 amp2(ik) = amps(2) 73 amp3(ik) = amps(4) 74 amp4(ik) = amps(5) 71 75 zksam(ik) = zkd 72 76 zksamp(ik) = zkp … … 89 93 pref = diku / ( diku + rghm ) 90 94 qjadon = one / ( four * zksamp(ik) * urat ) 91 call stot(ik,qjadon,fltng,Ntimp,Ntimm,time,bi,dmi) 92 cinner(ik) = - fltng * pref * twoap 93 bcin(ik) = cinner(ik) * dbesj1(xakap) 95 call stot(ik,qjadon,fltng_w,fltng_dwdt,Ntimp,Ntimm,time,bi,dmi) 96 cinner_w(ik) = - fltng_w * pref * twoap 97 cinner_dwdt(ik) = - fltng_dwdt * pref * twoap 98 bcin_w(ik) = cinner_w(ik) * dbesj1(xakap) 99 bcin_dwdt(ik) = cinner_dwdt(ik) * dbesj1(xakap) 94 100 8000 continue 95 101 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: … … 99 105 c for each of N3G disks in "aswokm(nrv,N3G)" . 100 106 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 101 call ojrule(dk,bcin )107 call ojrule(dk,bcin_w,bcin_dwdt) 102 108 go to 999 103 109 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: … … 108 114 pref = diku / ( diku + rghm ) 109 115 qjadon = one / ( four * zksamp(ik) * urat ) 110 call stot(ik,qjadon,fltng,Ntimp,Ntimm,time,bi,dmi) 111 cinner(ik) = - fltng * pref * twoap 112 bcin(ik) = cinner(ik) * oxakap * ( dsin(xakap) * oxakap 116 call stot(ik,qjadon,fltng_w,fltng_dwdt,Ntimp,Ntimm,time,bi,dmi) 117 cinner_w(ik) = - fltng_w * pref * twoap 118 cinner_dwdt(ik) = - fltng_dwdt * pref * twoap 119 bcin_w(ik) = cinner_w(ik) * oxakap * ( dsin(xakap) * oxakap 120 1 - dcos(xakap) ) 121 bcin_dwdt(ik) = cinner_dwdt(ik) * oxakap * ( dsin(xakap) * oxakap 113 122 1 - dcos(xakap) ) 114 123 9000 continue 115 call ojrule(dk,bcin )124 call ojrule(dk,bcin_w,bcin_dwdt) 116 125 999 return 117 126
Note:
See TracChangeset
for help on using the changeset viewer.